如何提取浮点位模式?

时间:2016-09-09 18:31:39

标签: c++11 floating-point-conversion

有些时候,我使用这样的代码有效地提取双精度的位模式作为int64:

    inline
    int64 rawDouble(double aDouble)
    {
        union Union {
            Union(double aDouble) : fDouble(aDouble) {}
            int64 bits() { return fInt64; }
            double fDouble;
            int64 fInt64;
        };

        return Union(aDouble).bits();
    }

(显然,有一种完全类似的模式可以将单个位模式提取为int32。)

我喜欢这个技巧,因为x86的SEE指令(和其他指令集类似)允许在逐个指令的基础上将各个寄存器位置解释为整数或浮点。

有人向我指出,C ++ 11及更高版本认为这是UB。

如果我不能使用这个技巧,我可以采用C ++批准的方法吗?

0 个答案:

没有答案