C++关于double型指数表示的问题

c++里面,给double变量赋值大于0.0001并且小于100000000000000000的时候,是用小数形式来表示,
但是小于0.0001或者大于100000000000000000的时候就会用指数来表示,这是什么原因?有没有理论依据之类的?
比如:double aa = 0.01; ⇒表示0.01
    double bb = 0.00001; ⇒表示1e-5
在线等,求指导哇,谢啦

第1个回答  2013-07-26
1.这赋值中,常数表示没有规定限制的,都可以。只要书写方便就行!
所以,不要理论依据。这是常数表示。
2.显示则与printf语句的实现有关,也是为了方便用户看,格式不能太长,
太小或太大就改用指数形式,理论依据是“方便”
第2个回答  2013-07-27
数值在内存里是一样的,double 是 2进制64位。有效数字14-15位。
用定点或科学记数法输出时可以自己给定格式,输出位数。
默认格式只是为了简洁能反映出基本有效数字(c语言 %g格式)。

#include <iostream>
using namespace std;
#include <stdio.h>
main(){
double a=0.00001;
printf("%g %lf %e\n",a,a,a); // 三种格式
cout << a << endl; // 默认格式
return 0;
}
输出:
1e-005 0.000010 1.000000e-005
1e-005本回答被提问者采纳
第3个回答  2013-07-26
printf或者cout的问题。调整一下输出语句就没问题了追问

我没往外输出,只是在debug的时候看的时候就有这个区别

第4个回答  2013-07-26
保存的格式是一样的,显示型式的问题追问

谢谢,现在就是想知道为什么显示形式不一样

追答

格式控制里边有个选项可以控制使用科学计数法还是普通方式显示

追问

谢谢,能在详细一点吗,那里设置?

追答

翻翻课本吧,这里是类似的用法

cout.precision (10); // 调用流成员函数
// 对于科学计数法,精度表示小数部分长度
cout.setf (ios::scientific);

setiosflags(ios::scientific)是用指数方式表示实数。iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移向小数点右侧;

C++关于double型指数表示的问题
1.这赋值中,常数表示没有规定限制的,都可以。只要书写方便就行!所以,不要理论依据。这是常数表示。2.显示则与printf语句的实现有关,也是为了方便用户看,格式不能太长,太小或太大就改用指数形式,理论依据是“方便”

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

C++ double 类型范围为什么那么大
它表示大数的代价就是损失了精度.打个比方,我有0-9这10个数,我定义数n表示5n,那么这10个数最大能表示45,但41,42这些不是5的倍数的数就没法精确表示了,只能在定义中把它们靠向40或者45.这就是为了扩大表示范围而损失了表示精度.

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;}运行结果:...

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

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

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

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++中double的412723199909242215输出后变成412723199909242240,为...
都有精度(能正确表示的位数)限制,超过这个精度就不能保证值的正确性了。这个道理就和任何编程语言里的整数类型只能表示有限个整数一样。其实C++标准规定了double类型的最低要精确到为小数点后15位。你这个结果说明在你使用的C++实现中,double类型的精度是16位。

C++中double可以保存15位有效数字,但是double长度只能8字节啊,为什么...
double的符号位为第63位,指数为第62~52位,共11位。表示的范围为-1024~1023。底数为第51~0位,2^52=4,503,599,627,370,496共16位【十进制位】。表示的范围为-1.7*10^308~+1.7*10^308。3.1415926是一个数,它的存储方式参照上述。" 3.1415926"才是10个字节(1个字符占一个字节)...

相似回答