[erlang-questions] Maths Problem -> 2452.45*100. = 245244.99999999997

Tony Rogvall <>
Wed Nov 27 10:13:44 CET 2013


Or a bit faster ?

Scale everything by a factor of 100 (or what ever suits the problem) and use fix point calculations.

245245 * 10000 = 2452450000

We just need to eat or drink something that make us see the dots. :-)

/Tony


On 27 nov 2013, at 06:52, I-T <> wrote:

> You might want to try:-
> 
> https://github.com/tim/erlang-decimal
> 
> Run
> 
> Iqbal-Bhatti:ebin afrobeard$ erl
> Erlang R13B03 (erts-5.7.4) [source] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
> 
> Eshell V5.7.4  (abort with ^G)
> 1> decimal:multiply("2452.45", "100").
> {0,24524500,-2}
> 2> 
> 
> Best Regards,
> 
> 
> On 27 November 2013 09:35, Michael Turner <> wrote:
> Gee, now might be a good time to bore everyone with a war story: a
> startup I once worked for independently /pre/-invented the Pentium
> Floating Point Bug, against my strenuous protests. How could this
> happen, I wondered, as I was losing the battle for IEEE-standard
> purity? Maybe, I thought, it's because we're a small company that
> can't afford to hire experts to ratify my opinion?
> 
> We were using Weitek FPU adder and multiplier chips in our hardware,
> and I implemented floating point division the way they said to do it -
> the right way. Tried to, that is. I got overruled.
> 
> Not too many years later, for the Pentium design, Intel acquired
> Weitek's IP. Then they introduced very similar mistakes in floating
> point arithmetic, through no fault of Weitek. Ours, at least, could
> have been patched by sending customers a new ROM to socket. Intel's
> errors went onto a single chip.
> 
> What I learned about IEEE floating point arithmetic is that if you try
> to clean up floating point "errors" one way, you just squeeze the
> errors out some place else.
> 
> What I learned about people is that Size Doesn't Matter.
> 
> The proximate provocation in both cases: somebody didn't like how the
> number printed. I first saw "errors" like when I was in high school,
> programming in Dartmouth BASIC. I was told, "floating point is like
> that - if it weren't that, it would be something worse." So I was
> prepared. But lots of people now graduate with C.S. degrees who aren't
> prepared.
> 
> 
> Regards,
> Michael Turner
> Executive Director
> Project Persephone
> K-1 bldg 3F
> 7-2-6 Nishishinjuku
> Shinjuku-ku Tokyo 160-0023
> Tel: +81 (3) 6890-1140
> Fax: +81 (3) 6890-1158
> Mobile: +81 (90) 5203-8682
> 
> http://www.projectpersephone.org/
> 
> "Love does not consist in gazing at each other, but in looking outward
> together in the same direction." -- Antoine de Saint-Exupéry
> 
> 
> On Wed, Nov 27, 2013 at 12:28 PM, Richard A. O'Keefe <> wrote:
> >
> > On 27/11/2013, at 3:01 PM, Sanath Prasanna wrote:
> >
> >> I accepted your comment. But generally we expected full value. I did same in another scripting language like php. It is given correct result.
> >
> > Wrong.  It *calculated* the same number as Erlang did,
> > but then it *displayed* a different number, a rounded version.
> >
> > m% cat >foo.php
> > <?php
> > $a = 2452.45*100;
> > echo $a; echo "\n";
> > $a = $a - 245245.0;
> > echo $a; echo "\n";
> > exit;
> > ?>
> > <EOF>
> > m% php foo.php
> > 245245
> > -2.9103830456734E-11
> >
> > We see from this that while the number *displays as*
> > 245245, it is not *equal to* 245245.
> >
> > As I said, PHP computed *exactly* the same answer as Erlang.
> > Who is this "we" who "expect full value"?
> > This is floating-point arithmetic, not rational arithmetic.
> >
> > (Our 2nd year students are taught this stuff, but it doesn't
> > really take.  In 3rd year they have an exercise they have to
> > do where they start to really understand that floating point
> > arithmetic is *not* arithmetic on the mathematical real
> > numbers, but a different mathematical system which sort of
> > approximates the algebra of the reals.  They learn that
> > adding up an array of numbers from left to right generally
> > gives you a different answer from adding up from right to
> > left, for example.)
> >
> > Numbers in IEEE floating point arithmetic are precise,
> > but are bounded in their precision, and arithmetic operations
> > on them (including conversion between decimal and binary)
> > have to round their answers to something that is representable.
> > There's a rounding in the conversion of 2452.45 to binary,
> > and then the multiplication incurs another rounding.
> >
> > _______________________________________________
> > erlang-questions mailing list
> > 
> > http://erlang.org/mailman/listinfo/erlang-questions
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
> 
> 
> 
> -- 
> Iqbal Talaat Bhatti
> 
> "If we did all the things we are capable of doing, we would literally astound ourselves." - Thomas Edison
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions

"Installing applications can lead to corruption over time. Applications gradually write over each other's libraries, partial upgrades occur, user and system errors happen, and minute changes may be unnoticeable and difficult to fix"



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20131127/53025f5f/attachment.html>


More information about the erlang-questions mailing list