英特尔软件开发人员手册中的Convert_Single_Precision_To_Double_Precision_Floating_Point()的定义是什么?

时间:2015-11-11 14:17:12

标签: floating-point x86

Intel® 64 and IA-32 Architectures Software Developer Manuals中,使用Convert_Single_Precision_To_Double_Precision_Floating_Point()伪代码函数描述CVTPS2PDCVTSS2SD指令的操作。

这个伪代码函数的定义是什么?

我搜索了组合软件开发人员手册(325462-056US),CVTPS2PDCVTSS2SD的“操作”部分是提到此特定伪代码功能的唯一两个地方。

编辑:特别是,单精度浮点数表示SNaN,QNaN或±Infinity处理的极端情况如何?

1 个答案:

答案 0 :(得分:3)

据我所知,每个32b浮点数可以用64b双精度表示,因此没有舍入或任何需要的东西,这使得这个功能对于英特尔来说太麻烦了,无法记录细节。

如何移动/转换位的实际细节是中等复杂的。我不打算总结一下,但要看一下njuffa的评论。关键是每32b输入都有一个独特的正确结果,因此您不需要知道它是如何实现的。结果将与其他所有正确的实现相匹配。

这不是英特尔insn参考手册中唯一一个没有定义功能的地方,如果名称很长且描述性很强,他们根本不需要。

Re: +/- Inf和NaN :我无法想到为什么+/- Inf会映射到+/- Inf以外的其他任何东西。

NaN has many unused bits,IDK是如何转变的。我假设NaN映射到NaN,但唯一的问题是"有效载荷"会发生什么。我假设SNaN - > SNaN和QNaN - > QNAN。

将这些浮点数映射到任何特定数字根本没有任何意义。您可以想象在float之后将double + Inf映射到下一个FLT_MAX,但这似乎是一个糟糕的主意,如果有人实施了这个,我会感到震惊转换那种方式。