【发布时间】:2015-11-11 14:17:12
【问题描述】:
在Intel® 64 and IA-32 Architectures Software Developer Manuals 中,CVTPS2PD 和 CVTSS2SD 指令的操作使用 Convert_Single_Precision_To_Double_Precision_Floating_Point() 伪代码函数来描述。
这个伪代码函数的定义是什么?
我搜索了合并的软件开发人员手册 (325462-056US),“操作”部分的 CVTPS2PD 和 CVTSS2SD 是唯一提到此特定伪代码函数的两个地方。
编辑:特别是,如何处理单精度浮点数表示 SNaN、QNaN 或 ±Infinity 的极端情况?
【问题讨论】:
-
它是伪的,只是一个占位符。实际实施可能是在英特尔内部开发的定制逻辑电路设计工具中完成的,而且肯定不会与任何人共享。你需要一个非常高倍的显微镜来观察硅结果:)
-
将单精度转换为双精度并不是什么秘密。顺便说一句,该过程已经在 StackOverflow 上的某处进行了描述
-
另一个方向(类似,只是更难):stackoverflow.com/questions/16737615/…
-
@PascalCuoq 我可能应该在我的问题中提到我对极端案例感兴趣。当前有一个活跃的pull request to the .NET CoreFX project,其中一个问题是当转换为
double时,代表NaN 或Infinity 的float是否仍代表NaN 或Infinity。 -
用我对会发生什么的最佳猜测更新了我的答案。如果您真的很偏执,那么在真实硬件上进行测试很容易。只需使用调试器并运行指令。我认为可以安全地假设每个 x86 CPU 都会为任何给定的输入提供相同的输出。
标签: floating-point x86