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 -- View this message in context: http://www.nabble.com/More-.NET-and-mono-floating-point-inconsistencies-tp22018718p22018718.html Sent from the Mono - General mailing list archive at Nabble.com. _______________________________________________ Mono-list maillist - Mono-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-list