Handling big FP numbers

DanielG simpletangent at gmail.com
Sat Feb 9 04:30:22 UTC 2019


On Saturday, 9 February 2019 at 03:33:13 UTC, Murilo wrote:
> Thanks but here is the situation, I use printf("%.20f", 0.1); 
> in both C and D, C returns 0.10000000000000000555 whereas D 
> returns 0.10000000000000001000. So I understand your point, D 
> rounds off more, but that causes loss of precision, isn't that 
> something bad if you are working with math and physics for 
> example?

0.1 in floating point is actually 0.100000001490116119384765625 
behind the scenes.

So why is it important that it displays as:

0.10000000000000000555

versus

0.10000000000000001000

?

*Technically* the D version has less error, relative to the 
internal binary representation. Since there's no exact way of 
representing 0.1 in floating point, the computer has no way of 
knowing you really mean "0.1 decimal". If the accuracy is that 
important to you, you'll probably have to look into software-only 
number representations, for arbitrary decimal precision (I've not 
explored them in D, but other languages have things like 
"BigDecimal" data types)


More information about the Digitalmars-d-learn mailing list