前幾天去面試,被問到怎么比較兩個浮點數的大小,當時只說了個大概,看得出來面試官不是太滿意,回來特意查了一下,在MSDN上發現了比較浮點數是否相等的不錯的方法:
// Initialize two doubles with apparently identical values double double1 = .33333; double double2 = (double) 1/3; // Define the tolerance for variation in their values double difference = double1 * .0001; // Compare the values // The output to the console indicates that the two values are equal if (Math.Abs(double1 - double2) <= difference) Console.WriteLine("double1 and double2 are equal."); else Console.WriteLine("double1 and double2 are unequal.");
上段代碼中定義了一個比較精度,兩個浮點數的差在此精度誤差之中,就可以認為相等。
至於兩個浮點數的大小比較,我認為直接用double1 > double2這種格式就可以了,看到網上有人將double1和double2的差和double.Epsilon比較,個人認為這只是取了最精確的精度值,跟上面的方法本質是一樣的,不知道理解的是否正確,歡迎大家拍磚。