C++_double类型数问题

最近发现一个问题
当我读入一个很大数时,我要考虑它大概的大小,我可以使用double类型的数
比如我要读入10^90~10^100的数,肯定要超过int,long long了
但是用double却可以读入,比如这幅图片
但是问题是读入后会丢失一些精度
想问问
第一:double不是最多可以保留16.17位吗,为什么可以输入这么多,然后输出,最多又可以
读入多少位?
第二:丢精度是哪里开始丢精度的,还是说因为转二进制问题,输入int类型的数(比如9999)
也可能丢精度?
求大神详细解说一下这个double数到底怎么回事,麻烦了,

谢!

实数类型就是牺牲了精度换取范围
double的话将实数写成x * 2^y 的样子,一部分空间储存前面的x,一部分空间储存y(当然全是2进制,x为2进制小数,y为2进制整数),存不下的话自然就舍掉了,所以丢精度是在所难免的。
一般情况下double的精度是够用的,但是10^100这么大的数用double存不太科学,一般都用字符串读入,然后高精度处理(可以自行百度)
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-15
“double最多可以保留16.17位”是指从最高位往下数16.17
虽然double只能保留16.17位,但输入位数是不限制的,scanf处理时会自动把超出的部分舍弃掉
这个图很明显就能看出来的,从最高位往下数,double保留了16位的精度
第2个回答  2014-02-15
请参考IEEE754标准:http://zh.wikipedia.org/wiki/IEEE_754

c++中超出精度double类型的值为什么会出现这种现象?
在C++中,double类型在表示浮点数时,可能会遇到精度损失问题。这主要是由于源代码文件对于编译器来说是一个字符串,编译器解析到double字面常量时,需要将十进制数字转换为二进制表示。double的表示方法遵循IEEE 754标准,为64位。当将十进制小数如"2.9999999999999999"转换为double时,由于许多十进制小数无...

C++_double类型数问题
实数类型就是牺牲了精度换取范围 double的话将实数写成x * 2^y 的样子,一部分空间储存前面的x,一部分空间储存y(当然全是2进制,x为2进制小数,y为2进制整数),存不下的话自然就舍掉了,所以丢精度是在所难免的。一般情况下double的精度是够用的,但是10^100这么大的数用double存不太科学,一...

求C++double的问题
很可惜的告诉你一点,直接用C或者C++是没办法进行很大数字的运算的。因为C++的double虽然能表示的范围是这么大,但是你可以认为它只是用科学记数法大致保存了你的数值。double类型的有效数字只有15~16位,float类型只有6~7位精度。

(C++)double型的数据,如何保留小数点后四位?
double b;b = floor(a * 10000.000f + 0.5) \/ 10000.000f; \/*保留小数点后四位*\/

c++中的double类型的精度问题怎么解决?
这本来就是近似的,要精度高就把π取精确点。acos(0)\/3.14159265358979*180应该是90.000000°了。include "stdio.h"#include "math.h"int main(int argv,char *argc[]){printf("%f\\n",acos(0)\/3.14159265358979*180);return 0;}运行结果:...

...大佬帮帮忙是有关建立自己的double类型数组的问题
要理清楚什么是数组,如何动态分配以及如何给数组赋值,遍历等基础知识。例如:double a[10];\/\/这种为double 数组,10个double 类型元素 double *b;\/\/double类型指针 静态分配b = a;动态分配 b = new double(10);赋值就是遍历数组,对其中元素赋值。

c++中double类型数据问题
double a;cin>>a;cout<<setprecision(5)<<setiosflags(ios::showpoint)<<a<<endl;return 0;} 当然了 你也可以这样 --- include<iostream> include<iomanip> using namespace std;int main(){ double a;cin>>a;cout<<setiosflags(ios::fixed)<<setprecision(3)<<a<<endl;return 0;} ...

c++ int double 问题
具体来说,当一个int类型的数据被转换为double类型并输出时,C++的cout默认将它表示为十进制形式的小数,即使这个int数据原本是一个整数。例如,当你输出一个整数123时,cout会将其表示为123.000,这可能会让程序的输出看起来有些奇怪。要解决这个问题,你需要修改cout的格式化规则。C++提供了setprecision...

C++中double型数据怎么取整数部分,就是小数后面全变成0。
1、首先,定义一个double型变量n,保存取整的数值。2、用ceil函数对实数5.78取整,取整后的数值保存在变量n中。3、输出取整后的数值n。4、运行程序,输出的值为6,这是因为ceil是对实数向上取整。5、接着,将ceil内的数更改为5.18。6、运行程序,看到的结果还是6,说明ceil是向上取整。

c++double类型的数结果是0时为什么不输出0啊?
在C\/C++中,float和double类型,被称为浮点型。浮点型是C\/C++中用来存储实数的。而存储的值,并不是实际值,而是近似值。即,double类型和float类型存储的值均不是准确值,而是一个和准确值接近的值。这样,在计算中,就会有精度缺失的情况出现,运算越多,这个精度缺失出现的概率越大。当经过大量计算...

相似回答
大家正在搜