浮点类型的比较

时间:2010-07-19 17:09:18

标签: c# performance floating-point

之间是否存在任何性能差异
 float x, y;
 // Set x and y
 if(x > y)
 {
    // do something
 }

 float x,y;
 // Set x and y
 if(x.CompareTo(y) > 0)
 {
    // do something
 }

他们是在幕后做同样的事还是还有更多。我有一个性能关键代码,它做了很多次这样的比较,我想检查没有比我想象的更多。

2 个答案:

答案 0 :(得分:4)

以下是一般性评论,无视性能。您应该知道使用运算符和IComparable方法之间存在细微差别。他们差不多做同样的事情。不同之处在于,当您的值均为NaN并且您正在检查是否相等。请参阅以下示例:

float x = float.NaN;
float y = float.NaN;

bool resultOperator = (x == y);               // will be false
bool resultCompareTo = (x.CompareTo(y) == 0); // will be true(!)

这种不一致的原因是IComparable接口要求x.CompareTo(x)返回零。

答案 1 :(得分:2)

第一个会更快,更可读。

x > y编译为IL指令,用于比较堆栈上的两个值。

x.CompareTo(y) > 0编译为正常的方法调用,然后进行比较,这将稍微慢一些。