Comments (5)
Case 1:
dec::decimal2(9999999999999998.0)
is not representable in this data type.
Maximum value is 2^63-1 divided by 10^precision, so something closer to 9,223372036854775808e16 in this case.
Case 2:
See case 1.
Case 3:
Using double constructor is not recommended and only useful for numbers with not too many significant digits.
In this case you are trying to use 17 digits with double which supports 15 to 17 significant decimal digits. In addition, construction from double requires additional digits in the middle of conversion (= precision).
So in this case 17 + 2 = 19 digits are required from double.
See sample code: https://ideone.com/GNTtuF
Wiki describing double limits: https://en.wikipedia.org/wiki/Double-precision_floating-point_format
For such case a special constructor has been created which supports better so many digits (string constructor).
Code:
dec::decimal<2> d1(3.1549999999999998);
std::cout << "Value #1 is: " << d1 << std::endl;
dec::decimal<2> d2("3.1549999999999998");
std::cout << "Value #2 is: " << d2 << std::endl;
outputs:
Value #1 is: 3.16
Value #2 is: 3.15
from decimal_for_cpp.
posible partial fix for line is
void init(double value) {
dec_storage_t t_v0 = static_cast<dec_storage_t>(value);
m_value = RoundPolicy::round(
static_cast<double>(DecimalFactor<Prec>::value) * (value - t_v0)) +
DecimalFactor<Prec>::value * t_v0;
}
from decimal_for_cpp.
Implemented fix as suggested, corrected unit tests, thanks!
from decimal_for_cpp.
same bug in line.
pls fix too
from decimal_for_cpp.
Assignment corrected too.
from decimal_for_cpp.
Related Issues (20)
- Problem with overflow detection with CLANG compiler.. HOT 1
- How does it stand against Muller's recursion ? HOT 2
- specify decimal separator HOT 2
- Make it fully trivial HOT 3
- Suggest using constexpr HOT 1
- Is it compatible with IEEE 754-2008? HOT 2
- Modulo operator HOT 2
- is there a way to perform assigment from std::string? HOT 1
- how to get an int/double from dec type ? HOT 3
- signal SIGSEGV, Segmentation fault on return HOT 2
- Still C++11 stuff when DEC_NO_CPP11 is defined HOT 1
- format_from_stream truncates its return value from decimal_format to basic_decimal_format HOT 3
- Enhancement: More friendly constructor HOT 1
- support for power and root ? HOT 1
- Edge cases failing HOT 1
- how to initialize in struct declaration HOT 4
- Need support to wstring HOT 1
- macos build is failing HOT 1
- unable to change precision of existing variable HOT 3
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 decimal_for_cpp.