为何C语言代码输出差值为0.000000?长双精度类型使用疑问
问题原因与解决方案
输出结果不符的原因
printf里用%Lf格式符输出long double时,默认只会显示6位小数。你的计算结果0.00000001前6位小数都是0,所以被截断成了0.000000——这不是计算错误,是输出格式的精度设置不够导致的显示问题。
long double类型是否正确
这个类型是合适的,它的精度普遍比double更高,完全能满足你多小数位计算的需求。不过有个小细节:你代码里写的1.00000001是double类型的字面量,赋值给long double变量时会先转成double再转成long double。如果想直接定义long double类型的字面量,记得在数字末尾加L(比如1.00000001L),不过就你这个数值来说,double的精度也足够存储,所以影响不大。
修复方法
修改printf的格式符,明确指定要输出的小数位数。比如要显示8位小数,就用%.8Lf:
printf("Difference: %.8Lf", difference);
运行后就能得到你预期的Difference: 0.00000001。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

