为什么.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) 为什么const在编译时它们的值被替换为值,但是仍然包含在汇编中?至少这是IL DASM和Reflector所展示的.
目前我const用于定义许多幻数和字符串,以便更容易地更改代码而不影响运行时性能.
现在我知道这不会影响已用内存,但它仍会影响编译的程序集大小,这对于手机应用程序来说至关重要.
另一个缺点是,在查看反汇编代码时,其他人更容易理解幻数.
我真的很感兴趣为什么编译器(Mono和.NET)完全这样做?