如何有效地比较包含双精度的std :: tuple是否相等

Mat*_*fel 0 c++ floating-point optimization c++11

我想比较两个包含尽可能高效的双元组的元组.

由于这不能用的,因为浮点精度预定义的==操作符(...)来完成,这将是最好的方法是什么?我真的需要遍历所有元组的元素或者是有一些神奇的模板,我可以使用,这可能让编译器调用某些SIMD的优化?

Eri*_*hil 6

错误地认为比较浮点值是否会受到影响.在任何未被严重破坏的实现中,当且仅当比较的值相等时,比较等式的浮点值才返回true.

任何实际错误都在您的计算中.必须控制和表征这些错误.如果没有对错误进行描述,则无法就适合您的目的执行哪些操作提出任何建议.

如果你有不精确计算的值,以便它们可能包含一些错误,并且你希望接受实际上不相等的相等值,那么你必须说明(a)接受相等的标准,以及(b)标准拒绝平等.当陈述这些标准时,人们可能会给出关于实施满足两个标准的测试的建议.请注意,(b)和(a)一样重要,因为您通常不希望接受实际上不相等的相等值.由于计算中存在错误,因此某些决策是错误的,您必须确定标准(a)和(b),以便您的应用程序可以接受错误的决策.重要的是(a)和(b)不重叠,否则将会出现无法接受决定的情况.

在您的情况下,除了从文件中读取数据之外,您没有说明任何错误来源.如果文件中的数据是由良好的软件写入的浮点计算的结果(正确地将浮点值转换为足够精确的十进制数字),并且您使用良好的软件(正确地将十进制数字转换为浮点数)来读取它点值),然后在这次数据往返中没有错误,你应该简单地测试没有装饰的相等性.