pow函式使用時候的誤差問題

2021-09-02 07:20:58 字數 1032 閱讀 8606

很多人有疑問了

pow函式怎麼了,多好用啊。

只需乙個標頭檔案,就可以隨便求指數級數字了。

#include//或#include
以上標頭檔案分別是c++格式(左),c格式(右)

本質上沒有什麼區別,不過貌似c++習慣用左邊的(忽略忽略)

求平方根:

pow(double ,0.5);
求立方

pow(double ,3);
求n次方:

pow(double ,n);
多方便啊。

上面是1到10的平方,什麼鬼?為啥有24,99!?!?!?

這個問題曾困擾到我不行。經過多番打聽和**鏖戰。我終於找到了為何–(誤差!):

1.

pow的函式原型:double pow(double ,double);

函式本身是乙個返回double型別的函式

2.

pow的計算方式,存在誤差,就是說pow(5,2);這條**,實際上是25,但是由於演算法問題(也可能是裝置處理器問題,我太laji,不知道。)很可能返回的值是24.9999,然後轉化為整型,變成了24。導致輸出整型的時候變成了24

我說了這麼多,那麼怎麼解決這個問題呢。

只需要加上乙個常變數就好了。一般放在主函式外面,

const int eps = 1e-6;
加上了這個比較小的常變數之後,24.9999就會超過(一點點)或等於25,轉化成整型之後就是25了

還有一種方法,就是老老實實用double存返回的值。

或者還有更好的方法。請多多指教吧。

*太難了 *

strcpy函式的使用時遇到的問題

strcpy函式為字串的賦值函式,可用與字元陣列與指標的賦值。函式宣告 char strcpy char dest,const char src 將src中的內容賦值到dest中。動態記憶體 include using namespace std void main chara new char 5...

IO流使用時候的小插曲

io字元讀入流 bufferedreader io字元寫入流 bufferedwriter 在定義io流的時候我們時常會用到對乙個檔案追加寫入,這時候我們都知道定義寫入流的時候 bufferedwriter bw new bufferedwriter new fildwriter 檔名 true 這...

C語言中pow函式的使用

標頭檔案 include 1.函式原型 pow 函式用來求 x 的 y 次冪 次方 x y及函式值都是double型 其原型為 double pow double x,double y 2.使用 pow 用來計算以x 為底的 y 次方值,然後將結果返回。設返回值為 ret,則 ret xy。3.注意...