下記のような質問をして、解答していただき、コンパイル実行をしました。
コンパイル時はマクロ定義した関数を括弧でくくりました。
Linux GNOME端末です。
『
C言語数値計算 ニュートン法です。
下記のプログラミングで、何故#include<stdlib.h>が必要なのかよく分かりません。先ほどの質問で、関数のマクロ定義は良くないと伺いましたが、今回はマクロ定義でのせさせていただきます。よろしくお願いします。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define F(x) exp(x)-3.*x
#define FD(x) exp(x)-3.
#define EPS 1.E-5
void main(void)
{
double x=0.0,fx,fdx,fx;
int n=0;
do{
fx=F(x);
fdx=FD(x);
dx=-fx/fdx;
n++;
x+=dx;
}
while(fabs(dx/x)>EPS);
printf("x=%7.3f\n",x);
}
』
すると、#include<stdlib.h>があってもなくても下のようなエラーがでます。間違いを指摘していただきたいです。
:(.text+0x24): undefined reference to exp'
:(.text+0x3f): undefined reference to
exp'
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
コンパイラによっては、math.h
で参照する数学ライブラリを、標準ではそのまま使えないことがあります。例えば、gccでは-lm
引数を付けてlibm
をリンクさせる必要があります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
gcc hogehoge.c -lm //#include<math.h>
と
double x=0.0,fx,fdx,dx; //fx
をすればコンパイルは通ると思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
VCだとコンパイルエラーは出ないですね。
開発環境がわかりませんが、expのエラーということなので
#define F(x) (exp(x)-(3.0 * (x)))
#define FD(x) (exp(x)-3.0)
としてみてはどうでしょう?マクロの引数は単独で括弧で囲むことと、マクロ定義全体を括弧で囲むことは、副作用を起こさないための最低条件です。
これでもエラーが出るのなら、お使いのコンパイラではexp関数はmath.hに定義されていないということになりますが(通常のC言語ならそんなことはないはずですが・・・)。
また、このままだとfxが二重定義なのとdxが未定義なので、そこでもエラーが出るはずです。
おそらく2つめのfxがdxなのだと思います。
ただ、エラーをなくして実行してみましたがdoループを抜けてきません。ロジックも見直したほうが良いかと。
最後に、プログラムコードは</>ボタンをクリックして```~ブロックの中に記述すれば見やすく整形してくれます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
ikedas
2017/01/05 17:11
オペレーティングシステムやCコンパイラの、名前とバージョンを明記して下さい。以前のご質問に書かれたのかもしれませんが、質問はひとつひとつ独立していますので。
2017/01/05 18:05
こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。