[prev in list] [next in list] [prev in thread] [next in thread] 

List:       velocity-dev
Subject:    [jira] [Closed] (VELTOOLS-182) MathTool.max longtime bug with args (0,0)
From:       "Claude Brisson (Jira)" <dev () velocity ! apache ! org>
Date:       2021-02-27 20:30:00
Message-ID: JIRA.13237148.1559536408000.13039.1614457800164 () Atlassian ! JIRA
[Download RAW message or body]


     [ https://issues.apache.org/jira/browse/VELTOOLS-182?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel \
]

Claude Brisson closed VELTOOLS-182.
-----------------------------------

> 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
> Assignee: Claude Brisson
> Priority: Major
> Fix For: 3.1
> 
> 
> 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.max(0)}} (just one arg) but at least that could be considered \
> a usage error.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic