- 主题:ieee浮点数有这个规律吗
就是任意两个浮点数Fa、Fb的内存值,强制转换成整数去看待的情况下记为Ia,Ib
是否有,若Fa>Fb,一定Ia>Ib
同样,Double和Long是否也是这样?
--
FROM 115.192.188.*
这不可能吧,如果Ia==Ib,则两个数的内存值完全相同,这不代表它们就是同一个浮点数吗?而同一个浮点数比较会出现大于或小于?
【 在 sosei (fss.sosei) 的大作中提到: 】
: 也可能Ia=Ib
--
FROM 115.192.188.*
啊对,我一开始想岔了,FFFFFFFF在float里最小,我以为在integer里也是最小。后来想了一下,其实只是-1。
【 在 ilovecpp (cpp) 的大作中提到: 】
: 俩正浮点数似乎是的。
: 俩负浮点数显然不是,因为负整数是补码,而浮点数不是。
--
FROM 115.192.188.*
我是遇到了大量浮点数的比较,最大可能G量级,我在想,转换成整数比较会不会快一点?还是说我想多了,其实对cpu来说,这两种比较没有区别?
【 在 Bernstein (Berns) 的大作中提到: 】
: 保证不了,因为浮点数不是全序的
: 需要加一些条件,然后做一些比特位的变换,才能转成整数比较
--
FROM 115.205.65.*
有一段内存p1,里面存放了浮点数
我想这样做int *p2 = (int *)p1 当做整数数组来处理
这个我一直以为是叫强制转换
【 在 ble (ble) 的大作中提到: 】
: 这个应该说“二进制解释/翻译”吧,一般说强制转换是cast,是取整。
--
FROM 115.205.65.*
明白了,很清楚,受教,非常感谢!
【 在 ble (ble) 的大作中提到: 】
: 好像在C语言里(T)都叫强制转换,但是C++里做了区分
: float f;
: // 这俩其实都是强制转换,ip 和 &a甚至值都不变
: ...................
--
FROM 115.205.65.*
目标是寻找特定范围的浮点数,而内存里的数据是乱的,那很有可能就碰上您说的NaN,看来,我之前的理解是错的。
我以为所有的内存值,都能对应一个特定的浮点数,没想到还会有NaN,Inf.,而且,从规范看,有很多内存数据,都对应这两类。
或许得自己定义一个Float结构来解析?
【 在 Bernstein (Berns) 的大作中提到: 】
: 如果你要保证一直都有结果,最好是转成整数(无符号或有符号)
: 要按浮点数比较的话,如果包含NaN之类的值,在包含这些值的情况下,浮点数集合上的比较操作不是全序
--
FROM 115.205.65.*