gpt4 book ai didi

c++ - 比较 float 的位表示

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:49 25 4
gpt4 key购买 nike

假设我想要一个接受两个 float (xy)的函数,并且我想使用不使用它们的 float 来比较它们表示,而是将它们按位表示为 32 位 unsigned int .也就是说,像 -495.5 这样的数字有位表示 0b110000111110010111000000000000000xC3E5C000作为 float ,我有一个 unsigned int具有相同的位表示(对应于十进制值 3286614016 ,我不关心)。有什么简单的方法可以让我执行类似 <= 的操作吗?在这些花车上仅使用其各自 unsigned int 中包含的信息同行?

最佳答案

除非您确保所有原始值都是正数,否则您必须进行有符号比较。您必须使用与原始浮点类型大小相同的整数类型。每个芯片可能具有不同的内部格式,因此将不同芯片的值作为整数进行比较很可能会产生误导性结果。

大多数 float 格式看起来像这样:sxxxmmmm

s是符号位
xxx是一个指数
mmmm是尾数

表示的值将类似于:1mmm << (xxx-k)

1mmm因为有一个隐含的前导 1位,除非值为零。

如果xxx < k那么这将是一个右移。 k接近但不等于 xxx 可以表示的最大值的一半.它根据尾数的大小进行了调整。

总而言之,忽略NaN , 将浮点值与相同大小的带符号整数进行比较将产生有意义的结果。它们的设计方式使浮点比较的成本不比整数比较高。有编译器优化关闭NaN如果芯片的浮点格式支持,则检查以便比较是直接整数比较。

作为一个整数,NaN大于无穷大于有限值。如果您尝试进行无符号比较,所有负值都将大于正值,就像将有符号整数转换为无符号整数一样。

关于c++ - 比较 float 的位表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582417/

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