在printf中关于double占位符的问题(初学者)
本帖最后由 Cathy-Chen258 于 2020-11-8 10:22 编辑#include <stdio.h>
#include <math.h>
int main()
{
double p0,p1,r;
int y;
p0=1370536875;
y=2050-2010;
r=0.005;
p1=p0*pow(1+r,y);
printf("p1=%lf\n",p1);
return 0;
}
问题1.用double的话,printf用%f还是%lf
问题2.用%lf(双精度)为什么输出时数据只精确到七位(我用“%.12f”时运算结果与计算器的答案不一样T-T)
(感谢你的热心帮助^-^) 本帖最后由 昨非 于 2020-11-8 10:43 编辑
用double的话,printf用%f还是%lf
输出的时候都可以的
参考:https://blog.csdn.net/meme_yun/article/details/88586815
问题二:我这里十二位输出没问题
至于误差,程序计算精度太高时都难免或多或少的有浮点误差的
昨非 发表于 2020-11-8 10:35
输出的时候都可以的
参考:https://blog.csdn.net/meme_yun/article/details/88586815
ok好的{:5_109:} 昨非 发表于 2020-11-8 10:35
输出的时候都可以的
参考:https://blog.csdn.net/meme_yun/article/details/88586815
我怀疑是我的编译器版本问题运算精确七位以上都是直接给0{:5_99:}(我是说单单这道题) Cathy-Chen258 发表于 2020-11-8 10:55
我怀疑是我的编译器版本问题运算精确七位以上都是直接给0
额,这我就不清楚了 #include <stdio.h>
int main()
{
double p1 ;
int k ;
for(p1 = 1370536875 , k = 0 ; k <= 40 ; k ++) p1 *= 1.005 ;
printf("p1 = %.12lf\n" , p1) ;
}
编译、运行实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
p1 = 1681509235.482084300000
D:\00.Excise\C> jackz007 发表于 2020-11-8 10:57
编译、运行实况:
首先很抱歉客观上给不到你“最佳答案”了但主观上还是很感谢你的帮助
其次就是那个第七行“for”里面那个思路我没看明白(初学者还没学到用for)T-T
衷心地谢谢你的热心回答{:5_110:}{:10_298:} Cathy-Chen258 发表于 2020-11-8 11:08
首先很抱歉客观上给不到你“最佳答案”了但主观上还是很感谢你的帮助
其次就是那个第七行“for”里面 ...
for 语句就是循环,在本例中,就是循环 40 次,执行这条语句
p1 = p1 * 1.005
40 次,取得
p1 = 1370536875 * pow(1.005 , 40)
的实际效果。
这个计算结果符合你在计算器上得到的结果吗? jackz007 发表于 2020-11-8 11:18
for 语句就是循环,在本例中,就是循环 40 次,执行这条语句
40 次,取得
哦!我懂这意思了但就是说你定义的“k”要使算式运到40次它的格式就是这样对吗?就是想理解如何设定循环次数 jackz007 发表于 2020-11-8 11:18
for 语句就是循环,在本例中,就是循环 40 次,执行这条语句
40 次,取得
我的运算结果跟你的一样但不和计算器的一样而已
页:
[1]