stf*_*tfx 4 .net math double reflector type-conversion
为什么.Net实现了Math.Min(float,float)函数,如下所示:
public static float Min(float val1, float val2)
{
if ((double) val1 < (double) val2 || float.IsNaN(val1))
return val1;
else
return val2;
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以看到使用IsNaN我不明白为什么他们在比较值时会转换为double.这不比简单写作慢val < val 2吗?特别是如果我想用它来将数字钳位到数字而没有像0f或那样精确1f.
我是否应该继续实施一个自定义数学库,另外还需要具有非NaN值以获得最佳性能,还是浪费时间?
public static float Min(float a, float b)
{
return a < b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)
是的,我使用的是Resharper
这就是问题所在,它会对代码进行摸索.源代码可以从Reference Source获得,它看起来像这样:
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static float Min(float val1, float val2) {
if (val1 < val2)
return val1;
if (Single.IsNaN(val1))
return val1;
return val2;
}
Run Code Online (Sandbox Code Playgroud)
很难猜到为什么Resharper这样做,我很容易认为它只是一个bug.支持Microsoft提供的源代码,不仅仅是为了准确,但评论也很好.