【发布时间】:2013-03-11 17:35:00
【问题描述】:
我最近读到这篇关于 SSE 算术运算中的 NaN 值的文章:
作用于两个非数字 (NAN) 参数的算术运算的结果未定义。因此,使用 NAN 参数的浮点运算将与相应汇编指令的预期行为不匹配。
来源:http://msdn.microsoft.com/en-us/library/x5c07e2a(v=vs.100).aspx
这是否意味着,例如,添加两个 __m128 值可能会将 NaN 转换为实数?
如果计算依赖于 NaN 值,我也需要最终结果为 NaN。有没有办法做到这一点?
【问题讨论】:
-
@Mysticial:忽略说明不能保证结果的文档是不谨慎的。
-
@EricPostpischil 我不会暗示这里就是这种情况,但之前已知 MSDN 文档有错误。 (因此,我什至对官方文件都持保留态度。)所以我一点也不感到惊讶,写这个 sn-p 的人可能比我们更了解这个话题。跨度>
-
@EricPostpischil 好吧,看看。由于您显然没有其他建设性的内容要说,我将以最后一条评论结束。我不会轻易质疑官方文件。但是当我这样做时,那是因为我有充分的理由这样做。鉴于我对编译器、SSE 内在函数/指令以及它们是如何实现的知识和经验,我可以说这个引用的关于 NaN 的陈述非常牵强(并非不可能,但牵强)。也许它只适用于非常小众的极端案例——他们应该澄清这些,而不是让我们猜测我们大多数人使用的所有“安全”案例
-
@EricPostpischil 当然不能保证结果;您最后一次看到没有提供“没有任何形式的保证”的软件是什么时候?
-
@EricPostpischil 你真的获得了动力,不是吗?你在这次讨论中的反应比你声称的年龄更能说明你的性格。
标签: c++ c floating-point sse nan