C言語の課題で…

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大学生

C言語の課題で…

#1

投稿記事 by 大学生 » 18年前

現在出されている課題なんですが、虚数解の出力の仕方が思い浮かびません。アドバイスお願いします。
以下途中まで作成したプログラムです。
課題

大学生

Re:大学生

#2

投稿記事 by 大学生 » 18年前

名前とタイトル逆にしてしまいました…

管理人

Re:大学生

#3

投稿記事 by 管理人 » 18年前

名前とタイトルについては修正しておきました☆
コードはなるべく字下げしたものを使用してください^^;
<pre>タグと</pre>タグで囲めば字下げされたまま投稿できます。
タグは全て半角で書いてください。

質問についてですが、計算式がわからないのでしょうか?
もし数学的なことでしたら、
http://www.google.co.jp/search?q=%E8%A4 ... C%8F&hl=ja
こちらなど参考にしてください。

組木紙織

Re:大学生

#4

投稿記事 by 組木紙織 » 18年前

細かいことですが、係数はdouble型なのに、判別式Dがfloatなのが気になります。
キャストをしているところがありますが、型をそろえておけばこのキャストは不必要です。

浮動点小数型を等号を使って比較しているのも気になります。
誤差が入ってくるので、浮動点小数型では数学的には正しくても、実行したら正しくないということが
よくあります。
fabs(D)<0.1
のようなことして、誤差の範囲で0と見做すということをよく使います。

>虚数解
虚数解は実数部と虚数部に分けて考えてあげれば計算できます。
分け方さえ思いつけば後はそんなに難しくありません。

box

Re:大学生

#5

投稿記事 by box » 18年前

> 浮動点小数型を等号を使って比較しているのも気になります。

丸め誤差の影響で、判別式の値が、例えば0.0000001なんていう、
ゼロに非常に近いけれどちょうどゼロではないという状態のとき、
本当は重解であるところプログラム上はそうならないことが
起こりえますね。

同じ理由で、本当は2つの解を持つのだけれどプログラム上は
重解とみなすことがあるかもしれません。

というわけで、判別式の値をゼロと比較すること自体は
特に問題ないと思います。

大学生

Re:大学生

#6

投稿記事 by 大学生 » 18年前

みなさん、アドバイスありがとうございます。参考にしてプログラム修正しました。
これなら、問題ないでしょうか?(家にC言語の環境がないので、動作確認はまだしていません。)

box

Re:大学生

#7

投稿記事 by box » 18年前

>       D=b*b-4*a*c; 
>       A=-b/( 2 * a );
>       B=sqrt(-D)/( 2 * a );

Dの正負がわかっていないのに、決めうちでsqrt(-D)とするのはまずいです。
このコードでは、もしDが正だったら負数の平方根を求めようとしますので、
正しい結果を得ません。

大学生

Re:大学生

#8

投稿記事 by 大学生 » 18年前

なるほど確かにそうですね…
A=-b/(2*a)  B=sqrt(-D)/(2*a)の場所を変えてみました。
これでもダメでしょうか…?

組木紙織

Re:大学生

#9

投稿記事 by 組木紙織 » 18年前

>同じ理由で、本当は2つの解を持つのだけれどプログラム上は
>重解とみなすことがあるかもしれません。

可能性としては、ありうるとは思いますが、実際問題としては、
数学的には同じであるが、プログラム上では異なるという場合のほうが圧倒的に多いので、

浮動点小数を扱うときには等号は、
同じであるとする範囲をどれくらいにすべきかという問題もあるのですが、
使うべきではないと思っています。

この場合は普通の数字の範囲では十分等号で判定できると思いますが、
気にしていないと不自然な結果がでたときに、困るので、書き込みをしました。


>これでもダメでしょうか…?
>scanf("%f",&a);
をscnaf("%lf",&a);
にすることぐらいでしょうか。
aの型はdoubleですので。

実際に動かしてみるのが一番なのですが、家に環境が無いのなら仕方ないですね。
調べてみたら無料で手に入るので家に環境を用意してみるといいと思います。

大学生

Re:大学生

#10

投稿記事 by 大学生 » 18年前

おかげさまで完成しました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る