MSVC win32:将扩展精度浮点数(80位)转换为双精度(64位)

Den*_*hev 5 floating-point fpu visual-c++

从扩展精度浮点数(80位值,在某些编译器中也称为“ long double”)转换为MSVC win32 / win64中double(64位)的最便捷和“正确”的方法是什么?

MSVC当前(截至2010年)假定“ long double”是“ double”的同义词。

我可能可以在内联汇编中编写fld / fstp汇编程序对,但是内联汇编不适用于MSVC中的win64代码。我是否需要将此汇编代码移至单独的.asm文件?真的是这样,没有好的解决方案吗?

小智 5

只是在 x86 代码中做到了这一点......

    .686P
    .XMM

_TEXT   SEGMENT

EXTRN   __fltused:DWORD

PUBLIC  _cvt80to64
PUBLIC  _cvt64to80

_cvt80to64 PROC

    mov eax, dword ptr [esp+4]
    fld TBYTE PTR [eax]

    ret 0
_cvt80to64 ENDP


_cvt64to80 PROC
    mov eax, DWORD PTR [esp+12]
    fld QWORD PTR [esp+4]
    fstp    TBYTE PTR [eax]
    ret 0
_cvt64to80 ENDP

ENDIF

_TEXT   ENDS
    END
Run Code Online (Sandbox Code Playgroud)