gpt4 book ai didi

c++ - 将 32 位 float 映射到 32 位整数

转载 作者:IT老高 更新时间:2023-10-28 21:36:43 25 4
gpt4 key购买 nike

有没有办法将 float 映射到整数或无符号整数,以便除 NaN 之外的顺序保持不变?

所以如果a和b是 float ,F是映射函数,

a < b 意味着 F(a) < F(b)和a == b 意味着 F(a) == F(b)

最佳答案

嗯,就在 Game Programming Gems 6 中的 DawsonCompare 例程之外,它是一个正常的位转换,然后是符号翻转(因为负浮点顺序与负整数相反)。我会借用这个想法。

你有:

// utility
template <typename R, typename T>
R& bit_cast(T& pX)
{
return reinterpret_cast<R&>(pX);
}

// int32_t defined in <boost/cstdint.hpp>.
boost::int32_t float_to_int_bits(float pX)
{
boost::int32_t x = bit_cast<boost::int32_t>(pX);

if (x < 0)
x = 0x80000000 - x;

return x;
}

如果你能保证你的 int 是 32 位,你就可以使用它。


有趣的事实:本书继续使用它(注意,不是我提供的确切代码,因为我去掉了浮点到整数部分)来比较浮点值和容差:

bool DawsonCompare(float pX, float pY, int pDiff)
{
int x = float_to_int_bits(pX);
int y = float_to_int_bits(pY);

int diff = x - y;
return abs(diff) < pDiff;
}

如果它们的整数表示在某个范围内,这会将 float 比较为真。 (他使用 1000 作为一个很好的默认值。)一个名为 LomontCompare 的无分支版本提出了相同的想法,但你必须为此购买这本书。 :)

关于c++ - 将 32 位 float 映射到 32 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com