一隻太平洋睡鯊 发表于 2021-12-1 22:32:07

新手提問,浮點數打印問題

代碼
#include <stdio.h>

int main()
{
        float y = 100.099f ;
        printf("%f", y) ;
        return 0 ;
}

會打印出來
100.098999

為啥會這樣呢??

傻眼貓咪 发表于 2021-12-1 22:35:26

精度问题
#include <stdio.h>

int main()
{
      double y = 100.099 ;
      printf("%lf", y) ;
      return 0 ;
}印出100.099000

jackz007 发表于 2021-12-2 00:55:12

本帖最后由 jackz007 于 2021-12-2 01:08 编辑

       一个 32 位数只能表达 4294967295 个不同的数值,普通浮点数在计算机内部正是通过一个 32 位数来进行保存的,就是说,32 位浮点数的理论极限表达能力是 4294967295 个不同的浮点数,这个数目远远小于32位浮点所能表达的数值范围,这就意味着浮点数只能做到近似表达,存在精度问题。
       你可以想象我们用尺子测量长度时的情景,一把尺子的刻度总是有限的,但是,我们总是可以通过一把刻度有限的尺子去测量各种长度。浮点数在计算机内部保存的正是被刻度化的数值,不可能做到你赋值多少,它就能按照原样保存多少。所以,计算机中的浮点数与生俱来地存在着精度问题。

阿萨德按时 发表于 2021-12-2 09:30:01

{:10_254:}

一隻太平洋睡鯊 发表于 2021-12-2 20:50:58

傻眼貓咪 发表于 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 22:06:15

一隻太平洋睡鯊 发表于 2021-12-2 20:50
可以問一下
如果%後面只有"f"也能打印出一樣的東西
使用"lf"有什麼特別的用意嗎?

%f 表示输出 float 类型,%lf 表示输出 double 类型

一隻太平洋睡鯊 发表于 2021-12-2 22:31:54

傻眼貓咪 发表于 2021-12-2 22:06
%f 表示输出 float 类型,%lf 表示输出 double 类型

了解~~問最後一個問題
%f也能打印出同樣的內容
是因為%f也能夠打印double類型變數?
還是這之後會造成一些問題?

傻眼貓咪 发表于 2021-12-2 22:34:57

一隻太平洋睡鯊 发表于 2021-12-2 22:31
了解~~問最後一個問題
%f也能打印出同樣的內容
是因為%f也能夠打印double類型變數?


可以打印,基本上 float 和 double 一样是浮点数,只是运算过程中 double 比 float 精准度更高(能存放数据更大)
页: [1]
查看完整版本: 新手提問,浮點數打印問題