Вроде бы на первых курсах компьютерных специальностей подробно описывают двоичное представление вещественных чисел. Может настало время вспомнить основы. Потому что, скорее всего, еще больше "глюков" будет при сравнениях double.
А за объяснением причин "глюка" в поиск, уже много раз он "проявлялся".
А по моему ничего страшного...
Вы выполняете операции над переменными вещественного типа, соответственно ждите погрешности...
0.8(9) ~ 0.9 отсюда
[quote]
The values returned by operators on floating-point numbers are those specified by IEEE 754. In particular, the Java programming language requires support of IEEE 754 denormalized floating-point numbers and gradual underflow, which make it easier to prove desirable properties of particular numerical algorithms.
[/quote]
Здравствуйте, dimok@, Вы писали:
D>Вроде бы на первых курсах компьютерных специальностей подробно описывают двоичное представление вещественных чисел. Может настало время вспомнить основы. Потому что, скорее всего, еще больше "глюков" будет при сравнениях double.
D>А за объяснением причин "глюка" в поиск, уже много раз он "проявлялся".
Здравствуйте, chili1, Вы писали: C>А Вы попробуйте выполнить тот же код в С++:
C>Результат будет: C>0.9
C>Тут то тогда что?
Ну и хорошо, что Java на простых случаях ошибку показывает. Конечно, надо в спецификацию C++ смотреть, но в принципе не факт что где-нибудь C++ не выдаст ту же ерунду (точнее факт, что выдаст). Только в этом случае ошибку будет найти труднее. Если не ошибаюсь, это все хорошо расписано у Бен Ари в "Языки программирования". Хотя может и ошибаюсь.
Здравствуйте, chili1, Вы писали:
C>А Вы попробуйте выполнить тот же код в С++:
Сильный довод. Показывает что про то как числа представляются в памяти в виде битов ты не знаешь не только в случае Java но и в C++ тоже.
C>Результат будет: C>0.9 C>Тут то тогда что?
Округление на любом уровне. Хоть при выводе на консоль, хоть ещё где.
Здравствуйте, chili1, Вы писали:
К>>Клёвый компилятор Формат у принтф хотябы какой?
C>Очень смешно! Просто самому ржать хочется. C>Microsoft Visual C++ v. 6.0 C>
For e, E and f specifiers: this is the number of digits to be printed after the decimal point. When no precision is specified, the default is 1. If the period is specified without an explicit value for precision, 0 is assumed.
Картина маслом: Java девелоперы тыкают носом в документацию по C++.
Здравствуйте, chili1, Вы писали:
D>>Вроде бы на первых курсах компьютерных специальностей подробно описывают двоичное представление вещественных чисел. Может настало время вспомнить основы. Потому что, скорее всего, еще больше "глюков" будет при сравнениях double.
D>>А за объяснением причин "глюка" в поиск, уже много раз он "проявлялся".
C>А Вы попробуйте выполнить тот же код в С++:
C>