gpt4 book ai didi

在保留顺序的同时将 float 转换为无符号整数

转载 作者:行者123 更新时间:2023-12-01 22:05:13 24 4
gpt4 key购买 nike

我在 SO 上找到了很多关于将 float 转换为 int 的答案。

我只处理正浮点值。我一直在使用的一种简单方法是:

unsigned int float2ui(float arg0) {
float f = arg0;
unsigned int r = *(unsigned int*)&f;
return r;
}

上面的代码运行良好,但无法保留数字顺序。按顺序我的意思是:

  float f1 ...;
float f2 ...;
assert( ( (f1 >= f2) && (float2ui(f1) >= float2ui(f2)) ) ||
( (f1 < f2) && (float2ui(f1) < vfloat2ui(f2)) ));

我曾尝试使用 union 来获得相同的结果。任何想法?我使用 Homebrew gcc 5.3.0。

最佳答案

如所写,您正在使用的代码具有未定义的行为。如果你想半可移植地访问 float 的表示(实现定义的,定义明确的假设 IEEE 754 并且 float 和整数字节顺序匹配),你应该这样做:

uint32_t float2ui(float f){
uint32_t r;
memcpy(&r, &f, sizeof r);
return r;
}

对于非负值,浮点值和表示之间的这种映射是保序的。如果您认为您看到它无法保持秩序,我们将需要准确了解您认为哪些值是反例。

关于在保留顺序的同时将 float 转换为无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370587/

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