it would be nice in one's project if you could basically say "use BigDecimal wherever you normally would have used a float", just to get the benefit but maintain ease of coding/readability etc - anyone know if this is possible? Would it be enough to override Float's initializer and return a BigDecimal instead?
On Mon, Jan 12, 2009 at 4:53 AM, Rick DeNatale <rick.denat...@gmail.com>wrote: > On Sun, Jan 11, 2009 at 9:21 AM, David Chelimsky <dchelim...@gmail.com>wrote: > >> On Sun, Jan 11, 2009 at 4:05 AM, Greg Hauptmann >> <greg.hauptmann.r...@gmail.com> wrote: >> > I've gone with the following >> > ai.amount.should == BigDecimal('-323.03') >> > However I'm still a bit surprised that Ruby itself does allow a good >> "==" >> > test between a Float and a BigDecimal. Perhaps there's a reason that >> I'm >> > missing? >> >> Very telling is this: >> >> >> require 'bigdecimal' >> => true >> >> BigDecimal.new(3333333.0) == 3333333.0 >> TypeError: can't convert Float into String >> from (irb):4:in `new' >> from (irb):4 >> >> As for why, I think you'll get some good insights if you post the >> ruby-lang mailing list, but I can take shot. >> >> BigDecimal has explicit precision. Float does not. Imagine the >> developer at the bank explaining that the thousands of dollars >> discrepancy last year was due to an average miscalculation of 0.00005 >> per transaction because sometimes the code used BigDecimal, and >> sometimes it used Float. >> > > Even more telling is this: > irb(main):001:0> 1.0 / 3.0 > => 0.333333333333333 > irb(main):002:0> (1.0 / 3.00) == 0.333333333333333 > => false > > This has little to do with rspec or Ruby, and everything to do with floats. > > Floats are approximations, it's a mistake to thing of them as equivalent to > the mathematical concept of real numbers, or even rational numbers. There > are several issues here including > > 1. Floats are not infinite precision, they have a fixed number of bits or > digits, this means that in-between any two consecutive real number which CAN > be represented by a float, there are an infinite number of reals which > cannot. > > 2. As is the case in decimal fractions, where some rational numbers such as > 1/3 cannot be represented without an infinite number of decimal digits, > there are similar values dependent on the base used for the float > representation. > > There's a whole branch of computer science, Numerical Analysis, comprised > in large part of understanding how Floats differ from the mathematical > ideal. > > > -- > Rick DeNatale > > Blog: http://talklikeaduck.denhaven2.com/ > Twitter: http://twitter.com/RickDeNatale > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > -- Greg http://blog.gregnet.org/
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users