C++ 在c/c+中将16.16定点转换为32位浮点的最快方法+;在x86上?

C++ 在c/c+中将16.16定点转换为32位浮点的最快方法+;在x86上?,c++,floating-point,fixed-point,C++,Floating Point,Fixed Point,大多数人似乎想走另一条路。我想知道是否有一种将定点转换为浮点的快速方法,最好使用SSE2。无论是直C还是C++,甚至ASM都可以。 只要有双精度FPU就很容易:有53位有效数字。SSE2具有双重精度 float conv_fx( int32_t fx ) { double fp = fx; fp = fp / double(1<<16); // multiplication by a constant return fp; } float conv_fx(i

大多数人似乎想走另一条路。我想知道是否有一种将定点转换为浮点的快速方法,最好使用SSE2。无论是直C还是C++,甚至ASM都可以。

只要有双精度FPU就很容易:有53位有效数字。SSE2具有双重精度

float conv_fx( int32_t fx ) {
    double fp = fx;
    fp = fp / double(1<<16); // multiplication by a constant
    return fp;
}
float conv_fx(int32_t fx){
双fp=外汇;

fp=fp/double(1这段代码显示了它到底有多简单。这里的主要性能约束是内存,而不是CPU。如果必须将固定点数组转换为浮点数,情况当然会有所不同。@mAlters:Vector unpack+pack操作将
int32_t
s对转换为
double
s一次仍然是一种方法用SSE转换一个数组。我想可能是这样的,但考虑到它是一个div(或mul)转换和另一个转换,它看起来很慢。我想我必须以各种方式尝试它。@codist:mul和64-to-32转换都应该是1个周期。谢谢,很难弄清楚像这样的事情有多快。