f(x)= x^2-10x-10(-5≦x≦15),-x^2+10x+140(x<-5,x>15)
整数a=-100から100のうちf(a)>0のみを画面表示するプログラムを作成せよ
-100から100まですべてのaについて試行し判定すること。
関数f(x)の値をかえす自作関数を作成すること。
という問題に対して下記のようなプログラムを考えたのですが、if文のif(a >= -5 && a <= 15)が機能していなく、すべてのaについて両方の関数に代入し値を算出してしまいます。
どのように改善したらよいのか教えて頂けたら幸いです。
自作関数内のif文について
Re: 自作関数内のif文について
「すべてのaについて両方の関数に代入し値を算出してしまう」ようなコードには見えません。りんごさん さんが書きました:if文のif(a >= -5 && a <= 15)が機能していなく、すべてのaについて両方の関数に代入し値を算出してしまいます。
本当にデバッガなどで両方の関数に代入しているように見えましたか?
それと、該当のif文を実行する時点で、aの値は不定です。
該当のif文のaを両方xに変えればいいと思います。りんごさん さんが書きました:どのように改善したらよいのか教えて頂けたら幸いです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 自作関数内のif文について
早い回答本当にありがとうございます!!
a→xにしたところ無事に改善されました。
デバッグなどで調べた訳ではないのですが表示された計算結果が
あまりにも大きすぎるため手計算で確かめたところ
両方の関数に範囲が関係なく-100から100の値が代入されていました
a→xにしたところ無事に改善されました。
デバッグなどで調べた訳ではないのですが表示された計算結果が
あまりにも大きすぎるため手計算で確かめたところ
両方の関数に範囲が関係なく-100から100の値が代入されていました
Re: 自作関数内のif文について
float型を使う必要が本当にあるでしょうか?
float型を++でインクリメントして本当にいいのかどうか、よくわかりません。
int系の変数に対してならば普通のことですけれど。
-100 ≦ a ≦ 100 であるならば、
for文は101未満と書くよりも、100以下と書く方が素直ではないでしょうか。まあ、どっちでも同じですけど。
float型を++でインクリメントして本当にいいのかどうか、よくわかりません。
int系の変数に対してならば普通のことですけれど。
-100 ≦ a ≦ 100 であるならば、
for文は101未満と書くよりも、100以下と書く方が素直ではないでしょうか。まあ、どっちでも同じですけど。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 自作関数内のif文について
調べてみると、過去ログがヒットしました。box さんが書きました: float型を++でインクリメントして本当にいいのかどうか、よくわかりません。
int系の変数に対してならば普通のことですけれど。
どうやら大丈夫とのことです。
http://dixq.net/forum/viewtopic.php?f=3&t=9447
Re: 自作関数内のif文について
仮に、float型のような浮動小数点数を
++
でインクリメントしてよいとしても、
浮動小数点数の誤差により、例えば
99.0をインクリメントした結果が
「ちょうど」100.0にならない結果、
ループの実行回数がちょうど201回にならなかったりして…。
int系の変数ではそういうことは起きない(はず)ですね。
まあ、int系を使うのが無難かと。
++
でインクリメントしてよいとしても、
浮動小数点数の誤差により、例えば
99.0をインクリメントした結果が
「ちょうど」100.0にならない結果、
ループの実行回数がちょうど201回にならなかったりして…。
int系の変数ではそういうことは起きない(はず)ですね。
まあ、int系を使うのが無難かと。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 自作関数内のif文について
ある程度小さい範囲では,浮動小数点数型を使って整数演算をしても誤差は発生しません。box さんが書きました:仮に、float型のような浮動小数点数を
++
でインクリメントしてよいとしても、
浮動小数点数の誤差により、例えば
99.0をインクリメントした結果が
「ちょうど」100.0にならない結果、
ループの実行回数がちょうど201回にならなかったりして…。
まず,Cの浮動小数点数型のモデルが,整数±1を正確に表せることを保証しています。
ISO/IEC 9899:1999のモデルx=sbeΣk=1p fkb-kにおいて,s = 1, e = 1, f1 = 1, fk|k≠1 = 0,とすれば,x=sbef1b-1なので誤差無く1が表せます。
あとは,その整数倍ですから,eを増やしてkをf1からfeを,f1を上位桁として並べれば,そのまま整数が正しく表現できます。
どこかのタイミングで,x + 1.0f == xとなるのですが,高々100程度であれば通常問題ないです。
ループ変数にintを使うのが無難なのは同意します。box さんが書きました:int系の変数ではそういうことは起きない(はず)ですね。
まあ、int系を使うのが無難かと。
浮動小数点数型は通常効率が悪すぎるのと,うっかり刻みを小数にしてしまって誤差に泣く可能性がありますので。
Re: 自作関数内のif文について
for文の制御変数にfloat型(などの浮動小数点数)を使うのは、
個人的にひじょうに気持ちが悪いと思っている、ということです。
私なら、「絶対に」しません。仮にfloatでうまくいくことがわかっているとしても。
個人的にひじょうに気持ちが悪いと思っている、ということです。
私なら、「絶対に」しません。仮にfloatでうまくいくことがわかっているとしても。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。