Допустим, у нас есть этот вид петли (псевдокод)Точность десятичного числа в Java, C, C++ и другие
double d = 0.0
for i in 1..10 {
d = d + 0.1
print(d)
}
В C с printf("%f", d)
я получаю это:
0.100000
0.200000
0.300000
...
1.000000
В C++ с cout << d
я получаю это:
0.1
0.2
...
1
в Java с System.out.println(d)
я получаю это:
0.1
0.2
0.3 (in debug mode, I see 0.30000000000004 there but it prints 0.3)
...
0.7
0.799999999999999
0.899999999999999
0.999999999999999
Так мои вопросы таковы:
- Почему этот простой код напечатан в Java так плохо и правильно в C?
- Как это ведет себя на других языках?
http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems – yas4891
Это не десятичные числа, они двоичные. Изучите это хорошо. –
StackOverflow нуждается в байесовском фильтре, который автоматически ищет слова «Decimal» и «Precision» в новых сообщениях ... – mcfinnigan