2013-11-10 2 views
0

Может ли кто-нибудь объяснить, почему следующая рубиновая рутина дает мне 2.0 в результате? Я думаю, что округление поплавков является корнем ошибки.Рубиновое вычитание числа чисел неправильно?

puts(999_999_999_999_999_9.0 - 999_999_999_999_999_8.0); 

= 2.0 

Те же ошибки?

puts(999_999_999_999_999_3.0 - 999_999_999_999_999_2.0); 

= 0.0 

Я управляю Ruby 1.9.3p448 (2013-06-27) [i386-mingw32].

+0

Да, это округление с плавающей запятой. Введенные вами цифры не могут быть представлены с полной точностью с использованием класса Ruby' Float'. Неточность не распространяется равномерно, и представление ваших вторых двух чисел на самом деле идентично - это тот же самый объект «Float». –

+0

Спасибо за ваш ответ! –

ответ

0

Эти цифры уже слишком велики, и Ruby не может считать их в них уже - он не может представлять столько. Таким образом, они подсчитывают их по два. Число в два раза больше будет подсчитано в четыре и т. Д.

Это зависит от количества цифр, которое может быть получено mantissa с поплавковым номером. Он всегда упоминается в описании базовых типов.

Смежные вопросы