[ https://issues.apache.org/jira/browse/VELTOOLS-182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16854935#comment-16854935 ]
Sanford Whiteman commented on VELTOOLS-182: ------------------------------------------- Yes, it's quite bad! Why not delegate entirely to Java instead? This method is to avoid running a sort proper against the collection, since it only needs a single return value, right? Which I understand for large collections, but does this represent real-world use? (I don't know, I personally never try to get the max of 2-3 user/system/default environment variables.) > 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 > Priority: Major > > 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