アプリ版:「スタンプのみでお礼する」機能のリリースについて

linux(ubuntu)の上でgccを使っています。

powの関数がおかしいです。

pow(10,-1)を計算させると正しく1e-1が出力されます。

#include <math.h>
#include <stdio.h>

int main(void){

double x = -1;
printf("%f",pow(10,x));

return 0;
}
上記のプログラムを走らせると、

In function "main";
*****.c:(.text+0x2d):undefined reference to 'pow'
collect2: ldはステータス1で終了しました。

というエラーメッセージがでます。

なぜかpow関数の中に変数を入れるとプログラムが動きません。

A 回答 (6件)

math.h のライブラリにある関数を使うには、libm をリンクする必要があるので、gcc のコマンドラインに -lm という指定が必要です。


printf などの関数は、libc に入っており、これは指定しなくても参照されます。

pow(10,-1)で -lm がなくてもエラーにならなかったのは、他の方が書いてますが、コンパイラが結果を計算してしまって実際にpowを呼ぶようなコードを生成しなかったからでしょう。
つまり、printf("%f",pow(10,-1)); が、printf("%f",1e-1); に最適化された。
    • good
    • 0
この回答へのお礼

コマンドラインに -lmを入れると正常にPOW(10、X)の計算ができました。ありがとうございます。

お礼日時:2014/09/17 08:39

じゃなくてコンパイルできなくて困ってるなら cc に -lm 付ければ。

    • good
    • 0

定数だとコンパイラが結果を埋め込んじゃうからじゃない?

    • good
    • 1

もしくは、引数は


double,double
double,int
等が正しいので両方ともdoubleにキャストしてみるとか
    • good
    • 0
    • good
    • 0

>なぜかpow関数の中に変数を入れるとプログラムが動きません。



私の環境では
0.100000

と表示されました。

windows7
vs2013
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!