Comments (4)
The precision of 7 comes from using MathContext.DECIMAL32
by default (see Java docs).
As for why that's the default, I'm not sure.
from evalex.
Looked into this a bit more. The 13 precision you are seeing in your default BigDecimal is not actually a default precision; precision adapts to the number of digits when it's not specified.
Looking at the BigDecimal source code:
private volatile transient int precision = 0;
/** * Returns the <i>precision</i> of this {@code BigDecimal}. (The * precision is the number of digits in the unscaled value.) * * <p>The precision of a zero value is 1. * * @return the precision of this {@code BigDecimal}. * @since 1.5 */ public int precision() { int result = precision; if (result == 0) { result = digitLength(); precision = result; } return result; }
If I'm correct, then this should be true:
BigDecimal bd = new BigDecimal("123");
System.out.println(bd.precision()); // print 3
And if that's true, then it looks like MathContext.UNLIMITED would be the 'correct' default in order to match default BigDecimal behavior.
from evalex.
Exactly, @squeek502. There is no default MathContext in Java, so I had to choose one specific. DECIMAL32 won the race. I think there was some reason after some tests, but I'm not sure.
Just read your second commen, @squeek502 and that may have been one reason.
Probably a separate constructor Expression(String expression, MathContext context)
could give more flexibility.
from evalex.
Hi all, thanks for the clarification. I guess for now I will set the precision to 0 and rounding mode to HALF_UP to match the default behavior (UNLIMITED).
from evalex.
Related Issues (20)
- Function ACOTH(x) is missing
- using E as a variable behaves different from 1.6 release HOT 1
- acot(-1) produces wrong result HOT 1
- Using library breaks R8/Proguard HOT 4
- java.lang.AssertionError: annotation container = @com.ezylang.evalex.functions.FunctionParameters()annotation element class = interface com.ezylang.evalex.functions.FunctionParameter; missing value() method HOT 3
- Incorrect token string that causes parsing error
- Negative power returns incorrect result HOT 1
- 2ab(a+b) => ParseException Undefined function 'ab' HOT 7
- ShuntingYardConverter silently drops tokens HOT 10
- Remove variable value HOT 1
- Evaluation throws NPE when a structure value is not defined
- Caching of parsed evaluation and subtree HOT 2
- Fraction calculation, is that possible?
- Expression should provide a thread-safe api HOT 4
- BUG: Undefined operator '.' ParseException when letter 'e' is after dot '.' HOT 2
- Evaluation of asin(1.5) will throw NumberFormatException which is a bit misleading HOT 1
- Structure access with arbitrary key format HOT 5
- OutOfMemoryError/memory leak on `e.<number>` input HOT 1
- Consider some wildcards for `Map<String, Object> values` HOT 2
- Unsupported data type 'java.time.LocalDate' HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from evalex.