查看: 1754|回复: 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
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|