初歩的な質問ですいません。
SetTani(char* text, double x)
{
BOOL test = FALSE;
double tmp = x;
double tmp1 = 1000.000;
if(x < 0){//もしもマイナスだったらプラスにする
tmp = fabs(tmp);
test = TRUE;
}
if(tmp >= tmp1){//ここで問題が発生
・
・
・
}
xに-1000が入ってきた時に問題が発生します。
絶対値を求めたあとのif文ではじかれてしまいます。
デバッグモードでみてみても
tmp 1000.000000
tmp1 1000.000000
となっているのになぜ
if(tmp >= tmp1)
がTRUEとならないのでしょうか?
ちなみにxに1000が入ってきたときは
tmp 1000.000000
tmp1 1000.000000
となっていて
if(tmp >= tmp1)がTRUEとなります。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
多分、実数の誤差に起因する問題でしょう。
変数のウォッチ(VC を使ってる?)ではなく、問題の箇所の直前に、以下のような文を追加して、変数の内容を確認してみて下さい。
printf("tmp = %40.30f, tmp1 = %40.30f\n", tmp, tmp1);
多分、内容が違っているはず。
質問にある「 x に -1000 が入ってきたとき」というのは、直接 x に -1000 を代入
したのではなく、float の変数を使った演算の結果だったりしませんか?
この回答への補足
tmp = 1000.000000000000000000000000000000,
tmp1 = 1000.000000000000000000000000000000
となっています。
ちなみに_chgsign(tmp)
もやってみましたが一緒でした。
ふぅ・・本当に何が原因なんでしょうか。
すいません、僕の勘違いでした。
やはりa-kumaさんがいっていた通り
tmp1 999.999999999999999999でした。
デバッグウィンドウでは
1000.00000000000000
なのに
なぜにprintfではしっかり出るのでしょうか?
No.3
- 回答日時:
tmpとtmp1をそれぞれ小数点以下20桁くらいまで表示してみて下さい。
何か分かるかも。
No.2
- 回答日時:
時間があれば、変数をdoubleからintに変更してみてください。
もし同じ不具合が起こらなくなったら、計算機内部で小数を保持する形式に起因する問題だと思います。(詳しいことは…わかりません。すみません)
もし同じ状況なら…わかりません。(ほんとにすみません)
この回答への補足
int test1 = (int)tmp;
int test2 = (int)tmp1;
if(test1 >= test2)
A;
else
B;
デバッグウィンドウでは
test1 1000
test2 1000
となっているのに
Bが実行されてしまいます。
-1000を1000に変換する方法がいけないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
difftime()について
-
1円、2円、3円・・・と貯金...
-
c言語で、繰り返し文の中で、0....
-
浮動小数点の比較について
-
C言語を実行すると-infが出てき...
-
至急です! マクロ定義で #defi...
-
doubleの変数にintとintの割り...
-
math.h等について
-
複素数代入解(C言語)
-
C#のプログラミングについて(...
-
C言語(プログラミング)関連の質...
-
浮動小数点の定数
-
c言語のコンパイルエラー canno...
-
C言語のプログラムで#include<m...
-
C言語の型による処理速度の違い
-
C言語のpow関数の不具合
-
int とdoubleの比較
-
P値(統計学)を求めるプログラム
-
関数の積分を求めるプログラム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
int とdoubleの比較
-
doubleは常に%lfとするべきなのか
-
difftime()について
-
C言語でdouble型の小数点の引き...
-
たくさんの数の平均を求める方...
-
斜辺と角度て底辺と高さを出したい
-
C言語で台形公式を使った二重積...
-
float?数字の後にLがつくもの
-
listに構造体を格納
おすすめ情報