求e的两段代码

来源:百度知道 编辑:UC知道 时间:2024/07/06 15:30:41
#include "stdafx.h"
#include "stdio.h"
void main ()
{
double e,t,i;
e=0.0;
t=1.0;
i=1.0;
while(t>=1.0e-6)
{
e+=t;
t/=i;
i+=1.0;
}
printf("e=%d",e);
}
输出的是e=1651327814

若把最后一行
printf("e=%d",e);改成
printf("e=%f",e);

则是输出正确的e=2.71..........

为什么
不明白
请详细解释
谢谢
我是新手

因为你的结果中e含有小数部分

在计算机里,所有数都是以连续的1或0表示的二进制数存储的,并不像十进制一样,有小数点的。

但是,整数和浮点数的存储格式是不一样的。

整数所有10串联合起来表示了整数的值,而浮点数则不同,里面部分01串代表的是整数部分,部分01串代表的是小数部分,另外一倍分代表的是2的多少次方(二进制的科学记数法a.bcd * 2的n次方)

至于具体哪部分代表整数,哪部分代表小数,哪部分代表阶数不同机有不同的规定

简单的以不带标点的十进制来比喻
比如1008
如果看成整数,则其值肯定是1008
但如果看成小数,则有可能是1.008或10.08或100.8或 1008

printf("e=%d",e);意思就是叫计算机把表示e的01串看成整数,不考虑小数点,所以打印出来的会是一个很大的数

printf("e=%f",e); 意思就是叫计算机把表示e的01串看成部分整数和部分小数的合集,考虑小数点,所以打印出来的才是正确结果

printf("e=%d",e);改成
printf("e=%f",e);

你把e定义的是float型数值,就要按照%f的格式输出
上面%d表示的是要照整数型

你把高优先级的用低优先级的输出了!

上面回答