Unity的精度问题(double)
double 类型的比较
double.Epsilon 是 double 类型的最小非零值,表示 double 类型能够表示的最小的差异。Mathf.Approximately 是针对 float 类型的,如果你需要比较 double 类型的浮点数,可以用 Math.Abs 和 double.Epsilon 来实现。
示例:使用 double.Epsilon 进行比较
public static bool Approximately(double a, double b)
{
return Math.Abs(a - b) < double.Epsilon;
}
精度:
double.Epsilon的值大约是4.9406564584124654E-324,比float.Epsilon更小。这意味着double类型的误差范围比float类型要精细得多。
示例:
double a = 0.1 + 0.2;
double b = 0.3;
if (Math.Abs(a - b) < double.Epsilon)
{
Console.WriteLine("a ≈ b");
}
else
{
Console.WriteLine("a ≠ b");
}
double 精度的实现:
如果你需要更精确的比较(例如不是 double.Epsilon 这么小的容差),你可以调整容差的大小。例如,可以设置一个更大的容差值,而不是使用 double.Epsilon,来允许一定范围内的误差:
public static bool Approximately(double a, double b, double tolerance = 1E-10)
{
return Math.Abs(a - b) < tolerance;
}
解释:
- 在这个例子中,
tolerance默认是1E-10,这意味着只有当两个数值的差异小于1E-10时,才会认为它们“接近”相等。你可以根据需要调整容差的大小。
总结:
- 对于
double类型,你可以使用Math.Abs(a - b) < double.Epsilon来进行比较,double.Epsilon的值非常小,适合用来处理非常精细的浮点数比较。 - 如果你希望更灵活的容差比较,可以调整容差值(如
1E-10)来满足实际需求。

浙公网安备 33010602011771号