首頁 > 後端開發 > C++ > 我們如何克服浮點運算的精確度問題?

我們如何克服浮點運算的精確度問題?

Linda Hamilton
發布: 2024-12-01 00:22:15
原創
774 人瀏覽過

How Can We Overcome Accuracy Issues in Floating-Point Arithmetic?

克服浮點數的精確度問題

浮點數是計算中廣泛使用的資料類型,由於存在潛在的精確度問題它們在機器中的內在表徵。為了說明這個問題:

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "4.600";
  double mw = atof(str);
  float p = 0.2;
  float g = 0.2;
  int h = 1;

  int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
  printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g));
  printf("Columns: %d\n", columns);

  return 0;
}
登入後複製

在此程式碼中,str 是「4.600」的字串表示形式,呼叫 atof(str) 將其轉換為 double mw。隨後的計算產生了一個不幸的結果:4.5999999999999996 的浮點表示形式無法精確表示所需值 4.600。

解決問題

如解決方案所突出顯示,用浮點運算實現精確相等實際上是不可能的。相反,最好比較可接受範圍內的數值。在某些情況下,必須認識到特定值無法準確表示為浮點數。

推薦資源

更多見解,請參閱以下參考資料:

  • [每個電腦科學家應該了解的浮點知識算術](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
  • [比較浮點數](https://floating-point-gui.德/)

以上是我們如何克服浮點運算的精確度問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板