Re: [問題] 有關 pow() 函數
※ 引述《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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章