請問C語言關於power(x, y)的函數

2008-03-31 10:05 pm
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int cub(int);
int main()
{
int final, x=5;
final = cub(x);
printf("The answer is: %d\n", final);
system("pause");
return 0;
}
int cub(int a)
{
return ((int)(pow(a, 3)));
}

-----------------------------------------------------------------
pow(x, y)函數的意思不是x的y次方嗎
為什麼這個程式,執行結果中
5的3次方會顯示124呢? 請問是哪裡出了問題
更新1:

我的編譯器是用Dev-C++ (Version 4.9.9.2) 執行結果是124耶...

回答 (4)

2008-04-01 1:23 am
✔ 最佳答案
dev編譯器不太健全
pow函數基本上是做浮點運算 float宣告
我改了一下 這樣我用dev跑沒問題


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
float cub(float);
int main()
{
float final, x=5;
final = cub(x);
printf("The answer is: %f\n", final);
system("pause");
return 0;
}
float cub(float a)
{
return pow(a,3);
}
2010-04-14 5:03 am
沒錯數值是125,我用wxDev-C++就沒有這個問題。
2008-04-01 6:00 am
你的問題,Joy已回答,盡補充一些小東西。

Dev C 4.9.9.2 確實傳回了 124,問題的確出在 DevC!

Dev C 4.9.9.2 的浮點數運算比 VC 2005 快,但較不準!
神奇的是:這次它問題是出在從 125.00000000000000000000轉成 int 時出錯!
(不是 124.99999999999999喔!)
但它是目前唯一真的提供 long double 的出名 compiler。
(舊 VC 有,VC 2003起 和 TC 2.0 一樣:只有名稱,沒功能)

2008-03-31 22:00:53 補充:
還有,DevC 的 pow 是 double,不是 float。

最後,要不是為了省 RAM(如:float a[10000000]),
或 研究 float,請不要用 float!

double 遠比 float 準,且現代的 CPU 只提供 double,沒提供 float!
float 是轉成 double 再轉回 float 的!
2008-04-01 3:03 am
我用的是 MS-Visual Studio 2005 專業版,執行的結果是 125 沒有錯的!


收錄日期: 2021-04-27 17:17:16
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20080331000010KK04341

檢視 Wayback Machine 備份