| 
 
查看: 1808|回复: 10
 
 | 
C++ 浮点的问题。
[复制链接]
 | 
 
 
 | 
 | 
 
嗨,有谁可以告诉我 Standard C++ floating point 的范围吗(最大和最小)? 
据我手上所有的课本,float 值大概是 1.2e-38 ~ 3.4e38。我想知道float如何处理负数。 
负数的范围又是如何呢? 
 
谢啦! |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 26-10-2005 06:09 PM
|
显示全部楼层
 
 
 
任何语言的浮点数都一样。 
 
基本上负的会比正的多“1”,不过对浮点数来说,“1”也实在太微不足道了! 
就当做和正数范围一样就可以了。 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 26-10-2005 08:24 PM
|
显示全部楼层
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 26-10-2005 11:57 PM
|
显示全部楼层
 
 
 
一般上,C float type的正数和负数范围都一样,是1.175494351E-38 到 3.402823466E+38。 
负数的是 -3.402823466E+38 到 -1.175494351E-38。 
(在特殊情况下,会有denormalized 的方式,可以储存更小的数目。) 
 
正数和负数的差别只有在sign bit。 
 
float用IEEE来储存浮点号码,有32bits (4 bytes)。 
23bits mantissa,8bits exponent和 1 sign bit。 
 
mantissa储存 1 到 2 的数目,exponent储存 -127 到 127 (用excess-127 格式)。 
所以我们就得到, 
最大:2 * 2 ^ 127 = 3.402823466E+38, 
最小: 2 * 2 ^ -127 = 1.175494351E-38 。 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
 楼主 |
发表于 27-10-2005 02:56 AM
|
显示全部楼层
 
 
 
| 
没钱老,用gcc ( mingw ) ... 谢谢这么多位详细的解释 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 27-10-2005 10:17 PM
|
显示全部楼层
 
 
 
原帖由 meemee 于 26-10-2005 11:57 PM 发表 
正数和负数的差别只有在sign bit。  浮点数没有使用“补数”吗? 
若有的话,差别就不只是 sign bit 而已。 
不过基本上不影响有效范围。 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
		
 | 
 | 
 
 
 楼主 |
发表于 28-10-2005 02:00 AM
|
显示全部楼层
 
 
 
原帖由 chu10 于 27-10-2005 10:17 PM 发表 
浮点数没有使用“补数”吗? 
若有的话,差别就不只是 sign bit 而已。 
不过基本上不影响有效范围。   
 
补数??可以补充些吗? |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 28-10-2005 01:34 PM
|
显示全部楼层
 
 
 
什么是"补数",2 complement吗? 
c/c++的floating point只用一个sign bit来带代表正或负数。 
可以算是sign and magnitude的方法。 
 
exponent的部分也没用2 complement,是用excess-127的格式。 
不过它的范围我弄错了,应该是 -126 到127 。 
所以它的最大和最小的计算方法是: 
最大:2 * 2 ^ +127 = 3.402823466E+38, 
最小:1 * 2 ^ -126 = 1.175494351E-38 。  
 
因为mantissa,最大很靠近2而最小的是1。 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 28-10-2005 02:10 PM
|
显示全部楼层
 
 
 
1.2e-38 ~ 3.4e38是normalized的范围,在denormalized的范围是: 
1.4e-45 ~ 3.4e38。 
 
现在,很多compiler都是用IEEE-754的格式,是1.4e-45 ~ 3.4e38的范围。 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 28-10-2005 06:39 PM
|
显示全部楼层
 
 
 
补数就是complement; 
2's complement 就叫做“2的补数”。 
 
那么请问浮点数怎么表示“0”这个数呢? |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 28-10-2005 07:02 PM
|
显示全部楼层
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 
 |   | 
            本周最热论坛帖子
 
 
 
 |