scz*_*zzo 8 c c++ floating-point objective-c
假设我想要一个带有两个浮点数 (x和y)的函数,我想不使用它们的float表示来比较它们,而是使用它们作为 32 位的按位表示unsigned int。也就是说,像这样的数字-495.5具有位表示0b11000011111001011100000000000000或0xC3E5C000作为float,并且我有一个unsigned int具有相同位表示(对应于十进制值3286614016,我不在乎)。有没有什么简单的方法可以让我<=只使用它们各自unsigned int对应的信息中包含的信息来对这些浮点执行这样的操作?
除非您确保所有原始值都是正数,否则您必须进行带符号的比较。您必须使用与原始浮点类型大小相同的整数类型。每个芯片可能具有不同的内部格式,因此将不同芯片的值作为整数进行比较很可能会给出误导性的结果。
大多数浮点格式看起来像这样:sxxxmmmm
s是符号位
xxx是指数
mmmm是尾数
所表示的值将类似于:1mmm << (xxx-k)
1mmm1因为除非该值为零,否则存在隐含的前导位。
如果xxx < k那样的话,这将是一个右移。k接近但不等于 可以表示的最大值的一半xxx。它根据尾数的大小进行调整。
总而言之,忽略NaN,将浮点值与相同大小的有符号整数进行比较将产生有意义的结果。它们以这种方式设计,以便浮点比较的成本不会比整数比较高。有编译器优化可以关闭NaN检查,以便在芯片的浮点格式支持的情况下,比较是直接整数比较。
作为整数,NaN大于无穷大大于有限值。如果尝试无符号比较,所有负值都将大于正值,就像有符号整数转换为无符号整数一样。
| 归档时间: |
|
| 查看次数: |
3109 次 |
| 最近记录: |