[llvm-dev] [question] с-double: 35.7 * 100 vs 3570.0

Daniil Troshkov via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 21 10:28:46 PDT 2017


Thank you!

On Tue, Mar 21, 2017 at 8:18 PM, Matthias Braun <mbraun at apple.com> wrote:

> Floating point arithmetic is not intuitive. http://www.lsi.upc.edu/~
> robert/teaching/master/material/p5-goldberg.pdf is a good introduction to
> the common pitfalls.
>
> TL;DR 35.7 cannot be represented exactly as a floating point number.
>
> - Matthias
>
> > On Mar 21, 2017, at 10:10 AM, Daniil Troshkov via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> >
> > Hi all!
> >
> > There is a simple c code:
> >
> > double a = 3570.0;
> > double b = 35.7 * 100;
> > int main ()
> > {
> >   if (b != a) return 1;
> >   return 0;
> > }
> >
> > It returns 1 due to:
> > 40abe400 00000000 //a = 3570.0
> > 40abe400 00000001 //b = 35.7 * 100;
> >
> > gcc do the same thing, so I think it's ok but why?
> >
> > For floats:
> >
> > float a = 3570.0;
> > float b = 35.7 * 100;
> > int main ()
> > {
> >   if (b != a) return 1;
> >   return 0;
> > }
> >
> > It returns 0...
> > 455f2000 //a = 3570.0
> > 455f2000 //b = 35.7 * 100;
> >
> > I will be grateful to get any explanations.
> >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > llvm-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170321/59086769/attachment.html>


More information about the llvm-dev mailing list