[Mono-dev] Double multiplication

Michał Ziemski rook at roo.k.pl
Thu Nov 29 08:10:01 EST 2007


Hi!

Floating point operations have finite precision.
Thus 128.2 * 100 might yield 12819.99999999..., which in turn yields 
12819 after applying Floor.

I beleve you would get an analogous result from a C program.

Maybe you should try rounding rather than Floor?

Beast regards,
Michał Ziemski

Vladimir Dimitrov pisze:
>
> Today was one of the strangest days that I had recently. I woke up 
> today to discover another way of thinking about numbers …J
>
>  
>
> To cut the long story short let me ask a simple question. Do you know 
> the result that the following code will produce as a console output:
>
>  
>
> using System;
>
>  
>
> namespace MultTest
>
> {
>
>     class Program
>
>     {
>
>         static void Main (string [] args)
>
>         {
>
>             double d1 = 127.2;
>
>             double d2 = 128.2;
>
>             double hundred = 100;
>
>  
>
>             Console.WriteLine ("{0} * {1} = {2}", d1, hundred, 
> Math.Floor (d1 * 100));
>
>             Console.WriteLine ("{0} * {1} = {2}", d2, hundred, 
> Math.Floor (d2 * 100));
>
>             Console.ReadKey ();
>
>         }
>
>     }
>
> }
>
>  
>
> Well what I get from it is:
>
>  
>
> 127.2 * 100 = 12720
>
> 128.2 * 100 = 12819
>
>  
>
> Am I the only one that thinks this is wrong? The things are even worse 
> because I noticed the problem on MS.NET first, and then on Mono and 
> since Microsoft is very unlikely to care about what I have to say, I 
> decided that you guys can be a lot more helpful.
>
>  
>
> Thanks
>
>  Vladimir Dimitrov
>
>  
>
> P.S. I tried it on different machines Core 2 Duo (T7200) and Pentium 4.
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>   





More information about the Mono-devel-list mailing list