由于优化原因,我想到了直接调用(使用内联汇编程序) 到功能“fldl”和“拳头”。可悲的是,我不知道如何运行它,因为我不是汇编程序的神。
我没有比这更进一步:
double* input;
long long output;
__asm fldl input;
__asm fist output;
最佳答案
__asm fld input
实际上会尝试读取您的指针 值,就好像它是一个浮点值一样。如果要读取指针指向的浮点值,则必须经过两步过程:将地址读入寄存器,然后使用寄存器中的地址读取数据.在 32 位平台上,它将类似于
__asm {
mov eax, input
fld qword ptr [eax]
fistp output
}
我刚刚在 VS2005 中尝试过,它可以工作。 (请注意,正如其他人在评论中所述,fist
不支持存储到 64 位 long long
,而 fistp
支持。但是你无论如何,可能都需要 fistp
,即快闪店。)
关于c++ - 内联汇编程序直接将 double 转换为 long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649475/