| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 47007 人关注过本帖
标题:求教 float 的有效数字到底是几位?
只看楼主 加入收藏
mengt2012
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-8-8
收藏
 问题点数:0 回复次数:6 
求教 float 的有效数字到底是几位?
float的有效数字到底是6位、7位还是8位。

程序代码:
#include <stdio.h>
int main(void)
{
    float a = 0.0;

    scanf("%f", &a);

    printf("%f", a);

    return 0;
}


当我输入123456.123456时他给出的数字是123456.125000,我又尝试了其他数,发现输出的数字前8位有效数字都是精确的。这是什么原因呢?

查了下,有不少人问过这个问题,可好像都没说清(或者说我看不懂……)。
2014-08-08 16:20
DavidCheung
Rank: 2
等 级:论坛游民
威 望:1
帖 子:14
专家分:35
注 册:2014-8-8
收藏
得分:0 
这与编译器和计算机环境有关,不一定是固定的。
2014-08-08 16:24
mengt2012
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-8-8
收藏
得分:0 
回复 2 楼 DavidCheung
这样啊。谢谢您的回复。
2014-08-08 16:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
float 尾数占23位,带有一个固定隐含位

也就是说,float有24个二进制的有效位数。
log10(2的24此方) = 7.2247198959355486851297334733878
也就是说 float有7个十进制的有效位数。

另外,你的代码不能说明任何问题,"%f"默认只输出小数点后6位。
2014-08-08 16:32
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
范围是3.4E-38 ——3.4E+38,可提供7位有效数字。
上述这两个量都是近似值,各个编译器不太一样的。

下面我就将标准值是怎么定义的,和你说一下:
这个比较复杂,建议你找一下IEEE754标准看一下。
这个简单说一下吧:
在IEEE754标准中进行了单精度浮点数(float)和双精度数浮点数(double)的定义。float有32bit,double有64bit。它们的构成包括符号位、指数位和尾数位。
这些位的构成如下:
种类-------符号位-------------指数位----------------尾数位----
float---第31位(占1bit)---第30-23位(占8bit)----第22-0位(占23bit)
double--第63位(占1bit)---第62-52位(占11bit)---第51-0位(占52bit)

取值范围主要看指数部分:
float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。
double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。

由于float的指数部分对应的指数范围为-128~128,所以取值范围为:
-2^128到2^128,约等于-3.4E38 — +3.4E38

精度(有效数字)主要看尾数位:
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位
2014-08-08 16:33
Cvdong
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-4-15
收藏
得分:0 
回复 5楼 宇宙规律
6位和7位吧 。
2016-07-07 20:27
初心An
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-12-4
收藏
得分:0 
这个代码怎么用啊?能求出基本数据类型的有效数字吗??
2020-12-04 19:55
快速回复:求教 float 的有效数字到底是几位?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015254 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved