Issue #10512 has been reported by Chris Heald. ---------------------------------------- Bug #10512: Time.at produces imprecise nsec values https://bugs.ruby-lang.org/issues/10512 * Author: Chris Heald * Status: Open * Priority: Normal * Assignee: * Category: core * Target version: * ruby -v: ruby 2.2.0preview1 (2014-09-17 trunk 47616) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- I'm working on improving JRuby parity with MRI, and I've found what I think is a bug in MRI and its test suite. test_time.rb, in test_at asserts: assert_equal(199, Time.at(0.0000002).nsec) This passes under MRI, but fails under JRuby, which produces (the correct) value of 200. It looks like there is a precision issue in MRI which is causing this behavior: 2.2.0-preview1 :008 > Time.at(0.000000197).nsec => 197 2.2.0-preview1 :009 > Time.at(0.000000198).nsec => 197 2.2.0-preview1 :010 > Time.at(0.000000199).nsec => 198 2.2.0-preview1 :011 > Time.at(0.000000200).nsec => 199 2.2.0-preview1 :012 > Time.at(0.000000201).nsec => 201 First and foremost, why does MRI assert that Time.at(0.0000002).nsec == 199, rather than 200? Second, if this is not a bug, why not (so that I can make sure JRuby performs equivalently)? -- https://bugs.ruby-lang.org/