【问题标题】:Fastest way to convert 16.16 fixed point to 32 bit float in c/c++ on x86?在 x86 上的 c/c++ 中将 16.16 定点转换为 32 位浮点的最快方法?
【发布时间】:2010-02-10 03:02:00
【问题描述】:

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

【问题讨论】:

    标签: c++ floating-point fixed-point


    【解决方案1】:

    只要你有一个双精度 FPU,这很容易:有 53 位有效数字。 SSE2 具有双精度。

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

    【讨论】:

    • 这段代码显示了它是多么简单。这里的主要性能限制是内存,而不是 CPU。如果您必须将 array 的定点转换为浮点数,情况当然会有所不同。
    • @MSalters:向量解包 + 打包操作以一次将一对 int32_ts 转换为 doubles 仍然是使用 SSE 转换数组的方法。
    • 我认为它可能是这样的,但考虑到它的转换是一个 div(或 mul)和另一个转换,它似乎很慢。我想我将不得不以各种方式尝试它。
    • @codist: mul 和 64 到 32 的转换都应该是 1 个周期。
    • 谢谢,很难想象这样的事情有多快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多