[Mono-list] More .NET and mono floating point inconsistencies
Kornél Pál
kornelpal at gmail.com
Sun Feb 15 07:54:05 EST 2009
Hi,
Thanks for the test cases, I'll invetigate these as well and try to fix
them.
The best way to get bugs fixed is to produce test cases and report them
in buzilla.
You can help more if you are able to provide a patch to fix the bugs.
Note that for some reasons Novell guys seem to ignore this bug mostly
because they have other things to do and their approval is required for
these changes.
Could you please describe your scenario (application name, purpose, etc.
if they are public) where you need these floating point roundings and
describe why these bugs are critical for you.
Providing some description may raise component owners' attention.
Kornél
ddambro wrote:
> I previously posted about some differences I noticed between the floating
> point math in .NET and mono
> http://www.nabble.com/Mono-and-.Net-Floating-Point-Inconsistencies-to21428695ef1367.html
> here . The bug report can be found
> https://bugzilla.novell.com/show_bug.cgi?id=467201 here . The patch
> provided (Thank you!) fixes several issues I was encountering, but
> unfortunately it led me to discover a couple more. The following two code
> samples were tested x86 machines using Linux mono 2.2 with the patch found
> in the bug report, a clean Windows mono 2.0.1, and the latest version of
> .NET targeting 3.0 framework and x86.
>
> ---
> 1.
>
> using System;
> using System.Runtime.CompilerServices;
>
> class Testing
> {
> [MethodImpl(MethodImplOptions.NoInlining)]
> public static void Main()
> {
> float f1=200;
>
> float distance=Distance(300, 500, 387.5f, 362.5f);
>
> float dist = 1 - (distance / f1);
>
> float distSqud = dist * dist;
>
> Console.WriteLine(distSqud.ToString("R"));
>
> foreach (byte b in BitConverter.GetBytes(distSqud))
> Console.WriteLine(b);
>
> }
>
> public static float Distance(float x1, float y1, float x2, float y2)
> {
> float xDist = x1 - x2;
> float yDist = y1 - y2;
> float dist = (float)Math.Sqrt(xDist * xDist + yDist * yDist);
> return dist;
> }
>
> On .NET this code produces:
> 0.0342619047
> 54
> 86
> 12
> 61
>
> and on mono it produces:
> 0.03426191
> 55
> 86
> 12
> 61
>
> ---
> 2.
>
> using System;
> using System.Runtime.CompilerServices;
>
> class Testing
> {
> [MethodImpl(MethodImplOptions.NoInlining)]
> public static void Main()
> {
> float distance = Distance(616.161255f, 391.2928f, 550.8382f,
> 131.006973f);
> Console.WriteLine(distance.ToString("R"));
>
> foreach (byte b in BitConverter.GetBytes(distance))
> Console.WriteLine(b);
> }
>
> public static float Distance(float x1, float y1, float x2, float y2)
> {
> float xDist = x1 - x2;
> float yDist = y1 - y2;
> float dist = (float)Math.Sqrt(xDist * xDist + yDist * yDist);
>
> Console.WriteLine(dist.ToString("R"));
>
> foreach (byte b in BitConverter.GetBytes(dist))
> Console.WriteLine(b);
>
> return dist;
> }
> }
>
> On .NET this code produces:
> 268.3576
> 198
> 45
> 134
> 67
> 268.3576
> 198
> 45
> 134
> 67
>
> and on mono it produces:
> 268.357635
> 199
> 45
> 134
> 67
> 268.357635
> 199
> 45
> 134
> 67
>
> ---
> These seem to be very similar to the issues I was encountering before, but
> they are not fixed by the patch. What is the best way to resolve these
> inconsistencies?
>
> Thanks,
> David
More information about the Mono-list
mailing list