Sanford Whiteman created VELTOOLS-182:
-----------------------------------------

             Summary: MathTool.max longtime bug with args (0,0)
                 Key: VELTOOLS-182
                 URL: https://issues.apache.org/jira/browse/VELTOOLS-182
             Project: Velocity Tools
          Issue Type: Bug
          Components: GenericTools
    Affects Versions: 2.0
            Reporter: Sanford Whiteman


It appears that {{$math.max}} has had a bug since at least 2.0, or at least I'm 
at a loss as to why the observed behavior would be expected, and it doesn't 
appear to be documented.

 
{code:java}
$math.max(0,0) {code}
 

returns

 
{code:java}
4.9E-324{code}
 

that is, Double.MIN_VALUE.

 

It's easy to see why in the source. Using 
[3.0|https://apache.googlesource.com/velocity-tools/+/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/MathTool.java#377]
 here, we see:

 
{code:java}
    public Number max(Object... nums)
    {
        double value = Double.MIN_VALUE;
        Number[] ns = new Number[nums.length];
        for (int i=0; i<nums.length; i++)
        {
            Number n = toNumber(nums[i]);
            if (n == null)
            {
                return null;
            }
            value = Math.max(value, n.doubleValue());
            ns[i] = n;
        }
        return matchType(value, ns);
    }
{code}
 

So rather than delegating to {{Java.lang.Math.max}} directly, each iter takes 
the {{Math.max}} of the current value and Double.MIN_VALUE. Ergo, if the 
arguments are 0, that's always < Double.MIN_VALUE, so the result is in turn 
Double.MIN_VALUE.

The same goes for {{$math.min(0)}} (just one arg) but at least that could be 
considered a usage error.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to