什么是将扩展精度浮点数(80位值,也被某些编译器称为
long double
)转换为双精度浮点数(64位)所需的最便携和“正确”的方法,在MSVC win32/win64中? MSVC目前(截至2010年)假定long double
是double
的同义词。我可能可以在内联汇编中编写fld
/fstp
组合,但在MSVC的win64代码中,内联汇编不可用。我需要将这段汇编代码移动到单独的.asm文件中吗?真的没有更好的解决方案吗?
if (exponent <= 0)
的处理意味着那些可以表示为二进制64位次规范化数的数字最终被表示为0.0
。 - Pascal Cuoqexponent == 0
情况确实会产生一个非规格化的双精度数。 - Calmariusexponent
在-52到0之间时(即此时需要进行操作),大致上需要做的是将隐含位显式化,将要使用的尾数向右移动-exponent
位,并将exponent
设置为零。OP最终使用了FSTP
,所以这并不是非常重要,但是您需要在您的仿真器中为FSTP
执行此操作 :) - Pascal Cuoq