From: knugie@... Date: 2014-02-28T23:23:38+00:00 Subject: [ruby-core:61155] [ruby-trunk - Bug #9192] Inconsistent comparison between Float and BigDecimal Issue #9192 has been updated by Wolfgang Teuber. Marc-Andre Lafortune wrote: > 2) The implementation is buggy. For example: > > BigDecimal('0.21611564636388508') == 0.21611564636388508 # => false, should be true You are exceeding the max precision Float::DIG (http://www.ruby-doc.org/core-2.0.0/Float.html#DIG => "Usually defaults to 15."). Your example uses 17 significant digits, which will ultimately lead to floating point number errors. The issue you described is not related to Gustavo's issue. ---------------------------------------- Bug #9192: Inconsistent comparison between Float and BigDecimal https://bugs.ruby-lang.org/issues/9192#change-45524 * Author: Gustavo Sales * Status: Open * Priority: Normal * Assignee: Kenta Murata * Category: ext * Target version: * ruby -v: 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin11.4.2] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN ---------------------------------------- I was checking a possible inconsistency on ActiveModel and I found situations where comparing BigDecimal to Float differs to comparing Float to BigDecimal. I have create a simple ruby script to exemplify the problem. The script is attach to this issue and output is as follows: Instance number 706.05 ########### Instance number 706.06 Inconsistence: 0.70606E3 > 706.06 706.06 < 0.70606E3 ========= Inconsistence: 0.70606E3 <= 706.06 706.06 >= 0.70606E3 ========= ########### Instance number 706.07 Inconsistence: 0.70607E3 < 706.07 706.07 > 0.70607E3 ========= Inconsistence: 0.70607E3 >= 706.07 706.07 <= 0.70607E3 ========= ########### Instance number 706.08 ########### ---Files-------------------------------- compare_decimal_float.rb (529 Bytes) -- http://bugs.ruby-lang.org/