Unity的精度问题(double)

double 类型的比较

double.Epsilondouble 类型的最小非零值,表示 double 类型能够表示的最小的差异。Mathf.Approximately 是针对 float 类型的,如果你需要比较 double 类型的浮点数,可以用 Math.Absdouble.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)来满足实际需求。
posted @ 2025-06-10 10:20  多见多闻  阅读(46)  评论(0)    收藏  举报