Project

General

Profile

Bug #13754

Updated by lionel_perrin (Lionel PERRIN) about 3 years ago

Hello, 

 I'm not sure if I've misunderstood the bigdecimal class but in the following example, I only get 12 significant digits using bigdecimal while using Float, I get a correct value with 17 significant digits. 

 ~~~ ruby 
 # using floats 
 101/0.9163472602589686 # 110.22022368622177 (OK: floating point computation) 

 # using bigdecimal 
 a = BigDecimal('101'); a.precs # [9, 18]  
 b = BigDecimal('0.9163472602589686'); b.precs # [18, 27] 
 c = a/b; c.precs # [18, 36]                (OK: I understand that c is computed with 18 significant digits) 
 c.to_s # "0.110220223686e3"                (Mmm: I see only 12 significant digits) 
 c - BigDecimal('0.110220223686e3') # 0.0 (Looks like c only stores 12 significant digits and not 18) 
 ~~~ 

 Using the Rational class, I've seen that the value I'm expecting is about:  

 ~~~ ruby 
 BigDecimal.new(Rational(101/Rational('0.9163472602589686')), 25) 18) # 0.1102202236862217746799312e3 0.110220223686221775e3 
 ~~~ 

Back