c++ - 对于包含无效值的数据集,应该使用浮点 NaN,还是浮点数+ bool?

  显示原文与译文双语对照的内容
0 0

我有大量的数据需要在每个数据集中进行数学密集型操作。 大部分类似于图像处理。 但是,由于该数据是从物理设备直接读取的,所以许多像素值都是无效的。

这使得表示值的nan的属性不是一个数字,并且在算术操作上扩展非常引人注目。 然而,它似乎需要关闭一些优化,比如-ffast-math的,而且我们需要跨平台。 我们当前的设计使用一个简单的结构,它包含一个浮点值和一个布尔值,表示有效性。

虽然南似乎是设计时考虑到这个用,其他人认为它比值得 更多的麻烦。 是否有人根据他们对IEEE754的更亲密体验和性能的经验提出建议?

时间: 原作者:

0 0

如果无效数据非常常见,你当然会浪费大量时间通过处理来运行这些数据。 如果无效数据足够常见,最好运行某种稀疏 datastructure,只运行有效数据。 如果不是很常见,你当然可以保留一个数据无效的稀疏 datastructure 。 这样你就不会为每个值浪费一个布尔值。 但也许记忆对你来说不是个问题。

如果你执行的操作如multipling两个可能无效的数据条目,那么我理解使用nan而不是对两个变量进行检查来检查它们是否有效,并在结果中设置相同的标志。

你需要如何移植? 你是否需要将它移植到一个只有定点支持的架构? 如果是这样的话,我认为你的选择是明确的。

我个人只使用 nan,如果它被证明快得多的话。 否则,如果你对无效数据有显式处理,那么代码会变得更加清晰。

0 0

由于floating-point数字来自一个设备,它们可能有一个有限的范围。 你可以使用其他特殊数字,而不是NaN来表示数据 absense,比如 1e37. 这里解决方案是可移植的。我不知道是否更适合使用bool标志。

原作者:
...