鱼C论坛

 找回密码
 立即注册
查看: 2314|回复: 6

关于float精度

 关闭 [复制链接]
发表于 2016-3-29 00:01:50 | 显示全部楼层 |阅读模式
50鱼币
用vc6.0编译c++程序,调用limits输出float取值范围为1.17549乘10的-38次到3.40282乘10的38次。。。代码如下。。std<<std::numeric_limits<float>::min()<<std::endl;
std<<std::numeric_limits<float>::max()<<std::endl;


但根椐IEEE,如果按规格化计算则与上方范围一致,但不是还有非规格化的数(无默认的1,且阶码为0)吗?最小正数应为2的-126次方乘2的-23次方即2的-149次方。为何编译器不承认这个值呢?

最佳答案

查看完整内容

因为c标准并不要求机器使用IEEE浮点标准。根本点说是综合考虑效率和精度问题,为了效率省去必要的精度。(我的理解) 早期的浮点数只有规格化浮点数,1985年后,IEEE标准754里规定了非规格化浮点数(深入理解计算机系统一书说的),这时intel为了对8087处理器的设计而资助的一项研究的成果。 非规格化浮点数的精度更高,但代价是需要额外的机器开销。据说sse2就会直接把非规格化浮点数视为0.也据说使用非规格化浮点数比只使用规 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-29 00:01:51 | 显示全部楼层
因为c标准并不要求机器使用IEEE浮点标准。根本点说是综合考虑效率和精度问题,为了效率省去必要的精度。(我的理解)
早期的浮点数只有规格化浮点数,1985年后,IEEE标准754里规定了非规格化浮点数(深入理解计算机系统一书说的),这时intel为了对8087处理器的设计而资助的一项研究的成果。
非规格化浮点数的精度更高,但代价是需要额外的机器开销。据说sse2就会直接把非规格化浮点数视为0.也据说使用非规格化浮点数比只使用规格化浮点数在极端情况下效率会下降百倍一上。
所以我认为是为了效率,c默认只使用规格化浮点数。

但我查找网络资料,见到一个函数调用。
fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV);
函数作用是设置浮点数环境,调用这个参数用是强制系统不使用非规格化浮点数。但我没有找到强制使用的参数的宏是什么,或者说也不知道有没有这个参数。
这个函数是在<cfenv>(旧的是<fenv.h>)库中,很遗憾,我的vs2010没有这个库,网上也没找到下的,所以也无法查看库文件里对这个函数的参数的宏定义。
楼主自己感兴趣的话,找到这个库文件自己研究下吧。

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +10 收起 理由
无名侠 + 10 + 10 + 10 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-29 08:58:50 | 显示全部楼层
float 分数值位和精度位的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-29 09:19:06 From FishC Mobile | 显示全部楼层
不懂啊,可不可以讲得细一点。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-29 15:50:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-30 20:23:46 | 显示全部楼层
,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-5 10:42:57 | 显示全部楼层
夜礼服 发表于 2016-3-29 15:50
@ryxcaixia @小甲鱼 @无名侠 @wzy997991067 @向往青莲 快来帮帮忙

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 23:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表