C# 双/单相等,直至预定义错误

C# 双/单相等,直至预定义错误,c#,.net,floating-point,C#,.net,Floating Point,是否有一个浮点数的标准类,其实现方式忽略了“小数值错误”(以前必须指定小数值) 我知道我可以自己实现类似的东西,但也许我不必重新发明它。没有广泛使用的类或库用于此,因为它是一种糟糕的编程技术,并且在提供任何好处的程度上,不容易适应不同的情况 将不相等的数字接受为相等可减少误报(由于浮点运算中的舍入而不被接受为相等的结果,但如果精确计算,则该结果将相等),但会增加误报(接受为相等但如果精确计算则不相等的结果)。没有一个通用的原则来平衡假阴性的减少和假阳性的增加,反之亦然,所以这个问题没有通用的解决

是否有一个浮点数的标准类,其实现方式忽略了“小数值错误”(以前必须指定小数值)


我知道我可以自己实现类似的东西,但也许我不必重新发明它。

没有广泛使用的类或库用于此,因为它是一种糟糕的编程技术,并且在提供任何好处的程度上,不容易适应不同的情况

将不相等的数字接受为相等可减少误报(由于浮点运算中的舍入而不被接受为相等的结果,但如果精确计算,则该结果将相等),但会增加误报(接受为相等但如果精确计算则不相等的结果)。没有一个通用的原则来平衡假阴性的减少和假阳性的增加,反之亦然,所以这个问题没有通用的解决方案

此外,还会出现许多不同的情况:浮点误差的大小可能与结果的大小有关,因此误差容差必须与结果成比例。或者,幅度在很大程度上可能是绝对的(相对于结果,可能相对于问题的其他方面),因此误差容差必须是一个固定的数字。阈值一侧的错误可能是可容忍的,而另一侧的错误可能不是(例如,取接近1的反正弦或接近零的平方根时)

如果您不关心误报,那么您可以简单地用
true
替换测试,这将消除所有误报。如果您不能接受,那么您需要确定哪些误报是不可接受的


这一决定在很大程度上取决于您正在执行的计算及其目的。确定计算中可能出现的舍入误差、舍入误差对结果的影响以及误差在应用程序中是否可以容忍是很重要的。

没有广泛使用的类或库,因为它是一种糟糕的编程技术,并且在一定程度上提供了任何好处,不容易适应不同的情况

将不相等的数字接受为相等可减少误报(由于浮点运算中的舍入而不被接受为相等的结果,但如果精确计算,则该结果将相等),但会增加误报(接受为相等但如果精确计算则不相等的结果)。没有一个通用的原则来平衡假阴性的减少和假阳性的增加,反之亦然,所以这个问题没有通用的解决方案

此外,还会出现许多不同的情况:浮点误差的大小可能与结果的大小有关,因此误差容差必须与结果成比例。或者,幅度在很大程度上可能是绝对的(相对于结果,可能相对于问题的其他方面),因此误差容差必须是一个固定的数字。阈值一侧的错误可能是可容忍的,而另一侧的错误可能不是(例如,取接近1的反正弦或接近零的平方根时)

如果您不关心误报,那么您可以简单地用
true
替换测试,这将消除所有误报。如果您不能接受,那么您需要确定哪些误报是不可接受的


这一决定在很大程度上取决于您正在执行的计算及其目的。确定计算中可能出现的舍入错误、它们将如何影响结果以及应用程序中是否可以容忍这些错误是很重要的。

在库中有一个静态类,它提供了许多请求的功能。没有运算符重载,但可能可用的方法仍然可以证明是足够的。

在库中有一个静态类,它提供了许多请求的功能。没有运算符重载,但可能可用的方法仍然可以证明是足够的。

Hm.不要认为存在这样的情况。您的意思是类似于比较的容差限制,很可能会在中构建某些内容,因为您可以对这两个数字使用,然后检查它们是否为
=
.Math.Abs(x-y)epsHm。不要认为存在这样的情况。你的意思是类似于用于比较的容差限制,非常不可能在这两个数字上构建某些东西。你可以在这两个数字上使用,然后检查它们是否是
=
。Math.Abs(x-y)eps