新手提問,浮點數打印問題
代碼#include <stdio.h>
int main()
{
float y = 100.099f ;
printf("%f", y) ;
return 0 ;
}
會打印出來
100.098999
為啥會這樣呢?? 精度问题
#include <stdio.h>
int main()
{
double y = 100.099 ;
printf("%lf", y) ;
return 0 ;
}印出100.099000 本帖最后由 jackz007 于 2021-12-2 01:08 编辑
一个 32 位数只能表达 4294967295 个不同的数值,普通浮点数在计算机内部正是通过一个 32 位数来进行保存的,就是说,32 位浮点数的理论极限表达能力是 4294967295 个不同的浮点数,这个数目远远小于32位浮点所能表达的数值范围,这就意味着浮点数只能做到近似表达,存在精度问题。
你可以想象我们用尺子测量长度时的情景,一把尺子的刻度总是有限的,但是,我们总是可以通过一把刻度有限的尺子去测量各种长度。浮点数在计算机内部保存的正是被刻度化的数值,不可能做到你赋值多少,它就能按照原样保存多少。所以,计算机中的浮点数与生俱来地存在着精度问题。 {:10_254:} 傻眼貓咪 发表于 2021-12-1 22:35
精度问题
印出
#include <stdio.h>
int main()
{
double y = 100.099 ;
printf("%f", y) ;
return 0 ;
}
可以問一下{:10_254:}
如果%後面只有"f"也能打印出一樣的東西
使用"lf"有什麼特別的用意嗎? 一隻太平洋睡鯊 发表于 2021-12-2 20:50
可以問一下
如果%後面只有"f"也能打印出一樣的東西
使用"lf"有什麼特別的用意嗎?
%f 表示输出 float 类型,%lf 表示输出 double 类型 傻眼貓咪 发表于 2021-12-2 22:06
%f 表示输出 float 类型,%lf 表示输出 double 类型
了解~~問最後一個問題
%f也能打印出同樣的內容
是因為%f也能夠打印double類型變數?
還是這之後會造成一些問題? 一隻太平洋睡鯊 发表于 2021-12-2 22:31
了解~~問最後一個問題
%f也能打印出同樣的內容
是因為%f也能夠打印double類型變數?
可以打印,基本上 float 和 double 一样是浮点数,只是运算过程中 double 比 float 精准度更高(能存放数据更大)
页:
[1]