C++中float,double到底保留几位有效数字

作者&投稿:边厚 (若有异议请与网页底部的电邮联系)
c++中,float型和double型各保留几位有效数字?麻烦举几个例子,谢谢~~

float精度是2^23,能保证6位。
double精度是2^52,能保证15位。
但是默认float和double都只能显示6位,再多需要#include ,然后在输出语句之前插入cout << setprecision(20);强制输出小数位。

float fval = 1.32121212f;
double dval = -45.67456554;
double dval2 = -4.456511111111111;
cout << fval << endl;
cout << dval << endl;
cout << dval2 << endl;
输出的结果是:
1.32121
-45.6746
-4.45651
参考资料:

float有效数字位为6 – 7位,字节数为4,指数长度为8位,小数长度为23位。取值范围为 3.4E-38~3.4E+38。
double有效数字位为15 – 16位,字节数为8,指数长度为11位,小数长度为52位。取值范围为1.7E-308~1.7E+308。

扩展资料
可根据应用程序的需求将变量声明为 float 或 double。这两种类型之间的主要差异在于它们可表示的基数、它们需要的存储以及它们的范围。如果存储比精度更重要,对浮点变量使用 float 类型。相反,如果精度是最重要的条件,则使用 double 类型。
浮点变量可以提升为更大基数的类型(从 float 类型到 double 类型)。当您对浮点变量执行算术时,通常会出现提升。此算术始终以与具有最高精度的变量一样高的精度执行。
参考资料来源:百度百科——浮点型数据

float精度是2^23,能保证6位。double精度是2^52,能保证15位。但是默认float和double都只能显示6位,再多需要#include <iomanip>,然后在输出语句之前插入cout << setprecision(20);强制输出小数位。

拓展资料

float与double的范围和精度

1、范围

float和double的范围是由指数的位数来决定的。

float的指数位有8位,而double的指数位有11位,分布如下:
float:1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:1bit(符号位) 11bits(指数位) 52bits(尾数位)

于是,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。

2、精度

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。



float精度是2^23,能保证6位。
double精度是2^52,能保证15位。
但是默认float和double都只能显示6位,再多需要#include ,然后在输出语句之前插入cout << setprecision(20);强制输出小数位。

float fval = 1.32121212f;
double dval = -45.67456554;
double dval2 = -4.456511111111111;
cout << fval << endl;
cout << dval << endl;
cout << dval2 << endl;
输出的结果是:
1.32121
-45.6746
-4.45651

扩展资料

结论:

  • 有些编译器 float的有效数字位是 8位 , 有些有效数字位是 7位

  • 有些编译器double的有效数字位是 15位, 有些是 16位

  • 注意printf(“%f”, x); // 默认输出6位小数(不要和有效数字混淆)

  • 分析

  • C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算

  • 是float还是double,在内存中的存储主要分成三部分,分别是:

  • (1)符号位(Sign): 0代表正数,1代表负数

    (2)指数位(Exponent): 用于存储科学计数法中的指数部分,并且采用移位存储方式

    (3)尾数位(Mantissa): 用于存储尾数部分

  • float 是 32位, 其中有23位用于存放尾数, 带有一个固定隐含位.. 所以float的有24个二进制有效位位数.

  • 2^24共有8个十进制位. 所以有些编译器 float的有效数字位是 8位 , 有些有效数字位是 7位.(注意不是小数的位数, 是有效数字位)

  • double也一样,是64位, 其中有52位用于存放尾数, 一个固定隐含位. 共有 53个二进制有效位位数.

  • 2^53次方有15个十进制位, 所以有些编译器double的有效数字位是15位, 有些是16位





float精度是2^23,能保证6位。
double精度是2^52,能保证15位。
但是默认float和double都只能显示6位。

扩展资料

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 

C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。



int ival = 3;
float fval = 1.32121212f;
double dval = -45.67456554;
double dval2 = -4.456511111111111;
cout << ival << endl;
cout << fval << endl;
cout << dval << endl;
cout << dval2 << endl;

输出的结果是:
3
1.32121
-45.6746
-4.45651

【拓展资料】

C语言中float和double的区别

float为单精度,占4字节(32位)的内存空间,它的数值有效范围是-10的38次方到10的38次方,只表示7位有效数字。而double为双精度,8字节,正负10的308次方之间,能精确到16位。这应该就是他们的的最基本的区别吧。



float精度是2^23,能保证6位。
double精度是2^52,能保证15位。
double精度的确有那么高,但是默认打印位数没有那么多。
先#include <iomanip>,然后在输出语句之前插入cout << setprecision(20);强行要求输出20位精度,就可以比较出float和double的精度差别了。

c语言中double和float有什么用法上的区别
答:对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时...

c语言中int类型float类型double类型变量做加减运算结果是什么类型...
答:如果操作数中有一个是double类型,则运算结果也将是double类型。如果操作数中有一个是float类型,而另一个是double类型,则运算结果将是double类型。如果操作数中没有double类型的变量,则运算结果将是float类型或int类型,具体...

c语言中double是什么意思
答:在C语言中,double是一种数据类型,用于表示浮点数,占用8个字节(64位),可以存储更大的数字范围和更高的精度,相比于float类型更为精确。double类型是由C语言标准使用的浮点数类型之一,它可以用于计算任何需要浮点数的场...

C语言中什么时候用float定义,什么时候用double定义
答:float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位) 8bits(指数位) 23bits(尾数位)double:1bit(符号位) 11bits(指数位) 52bits(尾数位)于是,float的指数范围为-127~+128,而...

C语言中printf输出float和double都用%f么(scanf又如何)
答:1、printf输出float和double都可以用%f,同时double还可以用%lf。2、scanf输出float用%f,而double输出用%lf,不能混用。

关于C语言中double型输出的问题
答:f格式化命令,float,double 默认只输出6位小数。但是float,double可以表示的浮点数范围及精度是不同的。例如1653 float a = 1.123456;float b = 1.12345679;例如:ble占8字节 对应的格式为%lf float占4字节 对应的...

c语言中double和float它们储存时分别占据多大的记忆体空间?
答:C语言中,如何进行记忆体空间申请? 使用malloc C语言中float,double等型别,在记忆体中的结构 从储存结构和演算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能储存...

C语言中的double和float
答:举例说明对于1.9999996666,按照float输出,结果可能为1.999999,如果按照double可能为1.999999,这是为什么,因为C语言默认输出小数位数都取6位,这时候看起来没有区别,但是如果你进行格式控制,比如使用%.10,即小数保留10位...

c语言中 float sum=0.0和double sum=0.0有什么区别?
答:1 占用大小不同,float占4个字节,double占8个字节;2 运算速度不同,double占用字节多,运算速度会慢一些;3 精度不同,double可以表示更大的精度;4 表示范围不同,double可以表示更大范围的浮点数。

在C编译程序中 什么时候用单精度变量float,什么时候有用双精度duoble...
答:但当你的程序运行内存比较有限,或者执行复杂度高的算法并对时间有较为严格要求,那么,变量的类型选择很重要,把一些明确精度要求或者运算结果范围在float范围内的数定义为float会让程序更好地适应运行环境。