EDIT: появляется во времениv.h, что вторые секунды представлены как целые числа вместо поплавков?Ошибка округления в Ruby Time
Даже если я знаю, что ошибки округления, связанные с реализацией IEEE 754 плавающих значений, я очень удивлен этому:
Time.utc(1970,1,1,0,0,12.860).strftime("%H:%M:%S,%L") # => "00:00:12,859"
Обычно точность ошибок для 8-го или 10-го знака после запятая, и я хорошо понимаю, почему. Но в этом случае влияет последняя значимая цифра моего значения, и это, по-видимому, является более серьезной ошибкой, чем в других известных случаях точности. Более того, это часть класса Time, и я не знаю, как это исправить в программе. Другие сообщенные ошибки округления float иногда могут быть исправлены с использованием разных классов, но в этом случае я не вижу никакого интересного класса для использования.
Моя среда:
[email protected] ~ % uname -a 11-02-2013 09:38:49
Linux eldiablo.loria.fr 3.5.0-23-generiC#35-Ubuntu SMP Thu Jan 24 13:05:29 UTC 2013 i686 i686 i686 GNU/Linux
/home/phil
[email protected] ~ % ruby -v 11-02-2013 09:38:51
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
EDIT: Итак, два вопроса по этому поводу: Является ли это или не ошибка? И как справиться с этим побочным эффектом, если мне нужна такая точность с классом Time? Любая идея или обходной путь?
Поскольку я не знаю внутренней реализации класса Time, я хотел бы быть уверенным, что это не ошибка, что может считаться моим первым вопросом. Второй вопрос - как справиться с этим побочным эффектом, если мне нужна такая точность с классом Time? –
Еще одно замечание: если я хорошо понимаю исходный код, то субсекунды в классе времени определяются как VALUE, т. Е. Как целое число без знака, то есть не как float. В этом случае, как может произойти такая ошибка? –