double在内存中的存储方式如下:
在判断一个double值是否等于0的时候,计算机先要把这个double值转化为一个真正的值,而计算机对位运算时最快的,因此可以优化为如下代码:
public static bool IsNull(double f)
{ DoubleOrLong val = f; return val.IsZero; }
[StructLayout(LayoutKind.Explicit)]
private struct DoubleOrLong
{
public static implicit operator DoubleOrLong(double f)
{
return new DoubleOrLong { D = f };
}
public bool IsZero
{
get { return U == 0u; }
}
[FieldOffset(0)]
private double D;
[FieldOffset(0)]
private readonly ulong U;
}
本文介绍了一种优化的判断double类型变量是否为0的方法。通过将double转换为包含位表示形式的结构,利用位运算来高效地判断其值是否为0。此方法避免了浮点数比较时常见的精度问题。
4555

被折叠的 条评论
为什么被折叠?



