日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

略谈float

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 略谈float 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們先來看這樣的一段代碼:

#include <stdio.h>void main() {float a = 0;for (int i = 0; i < 100; i++)a = a + 0.1;printf_s("a=%f", a);getchar(); }

運行結果如下:


為什么不是10呢?而是10.000002

我們對小數部分:如0.5,0.25,0.125

他們分別表示:2^-1,2^-2,2^-3,

所以對于某些小數不能精確的表示如0.1下面看截圖



我們先來看float在內存中的位置


第一個s代表符號為,1代表負數,0代表正數。


第二個域是指數域,對于單精度float類型,指數域有8位,可以表示 0-255個指數值。指數值規定了小數點的位置,小數點的移動代表了所表示數值的大小。但是,指數可以為正數,也可以為負數。為了處理負指數的情況,實際的指數值按要求需要加上一個偏差(Bias)值作為保存在指數域中的值,單精度數的偏差 值為 -127,而雙精度double類型的偏差值為 -1023。比如,單精度指數域中的64 則表示實際的指數值 -63。 偏差的引入使得對于單精度數,實際可以表達的指數值的范圍就變成-127 到 128 之間(包含兩端)。我們不久還將看到,實際的指數值-127(保存為 全 0)以及 +128(保存為全1)保留用作特殊值的處理。這樣,實際可以表達的有效指數范圍就在 -126 和 +127 之間。


第三個域為尾數域,其中單精度數為 23 位長,雙精度數為 52 位長。比如一個單精度尾數域中的值為: 00001001000101010101000, 第二個域中的指數值則規定了小數點在尾數串中的位置,默認情況下小數點位于尾數串首位之前。


下面我們應該如何避免這個問題

1.避免小數計算(代碼如下)

#include <stdio.h>void main() {float a = 0;for (int i = 0; i < 100; i++)a = a + 0.1*10;printf_s("a=%f", a/10);getchar(); } 運行結果:



第二種是省略(直接忽略某一位的值,如下圖所示)

#include <stdio.h>void main() {float a = 0;for (int i = 0; i < 100; i++)a = a + 0.1;printf_s("a=%.5f", a);getchar(); }


總結

以上是生活随笔為你收集整理的略谈float的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。