Re: [問題] 有關 pow() 函數

看板C_and_CPP (C/C++)作者 (鬼翼&娃娃魚)時間16年前 (2009/07/22 12:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《alai (none)》之銘言: : 推 hilorrk:我想應該是double的問題 只要有double型態出現就有可能會 07/22 11:30 : → hilorrk:不精準...還記得強制cast的運作方式嗎? 而用math.h和cmath 07/22 11:31 : → hilorrk:的差別應該是math.h的pow都是double型態 cmath不是吧... 07/22 11:31 : 推 VictorTom:他的問題不是這個, 這問題很怪是在dev-C++跑出來.... 07/22 11:44 : → VictorTom:double N=5.0; pow(N, 2); 拿來當loop終止條件的結果. 07/22 11:44 : → VictorTom:與 pow(5.0, 2) 當終止條件跑出來的結果不一樣.... 07/22 11:45 : → VictorTom:雖然你把兩個 pow() 直接print出來都是25.0沒錯~_~ 07/22 11:45 我貼一下我的code吧, 看有沒有大大可以解釋, 小弟是已經猜是bug了....XD == #include <iostream> #include <cstdlib> #include <math.h> /* 用 cmath 的話做不出問題 */ using namespace std; int main(void) { double N = 5.0; double M = pow(N,2.0); for(int i=0; i<=M; i++) /* 這行用 for(int i=0; i<=pow(N,2.0); i++) 取代, 在 Dev-C++ 4.9.9.2 跑出的結果會不一樣, 不過在 Visual C++ 2005 跑出來的結果是一致的. */ { cout << i << " "; } cout << endl; system("PAUSE"); return 0; } == 雖然以前有遇過因為浮點reg有80 bits的關係比var只有64精確.... 所以可能遇到最佳化後的code可能會有精確度不同的問題發生.... 不過這個例子看起來不是這麼一回事; 要研究就disasm去看吧Orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.41.4
文章代碼(AID): #1APe-K3x (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1APe-K3x (C_and_CPP)