breakで抜けたいです。 – プログラミング – Home

通知
すべてクリア

[解決済] breakで抜けたいです。


務
 務
(@務)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

下記のようにある値の差が0になったらループを抜ける処理をしているのですが
差が0のときも抜けることができません。
どこかおかしいでしょうか?
ご教授くださいませ。

if( kausuu > 1) {
RATE[kaisuu]=(double)Atai[kaisuu]-(double)Atai[kaisuu-1];

if(RATE[kaisuu] ==(double)0)
{
break;
}

}


引用未解決
トピックタグ
kajiki
 kajiki
(@kajiki)
ゲスト
結合: 22年前
投稿: 19
 

ちょっとインデントが変なのでそれだけ直したが

if( kausuu > 1) { // kausuuでいい
のかkaisuuじゃないのか?
RATE[kaisuu]=(double)Atai[kaisuu]-(double)Atai[kaisuu-1]; // キ
ャストしなくても最初からdoubleにすれば?

if(RATE[kaisuu] ==(double)0)
{
break;
}
}

なぜdoubleにしてるのかわからないんだが・・・intまたはlongでいいんじゃないのか?
少数を扱う意味があるのか?

RATE, Atariも配列になってるけど何故だ?中身はどこで代入してるんだ?
そもそもループはどこにある?

なにをやりたいのかさっぱりわからないのでそこから書いてもらえないだろうか


返信引用
kajiki
 kajiki
(@kajiki)
ゲスト
結合: 22年前
投稿: 19
 

if( kausuu > 1) { // kausuuでいいのかkaisuuじゃないのか?

RATE[kaisuu]=(double)Atai[kaisuu]-(double)Atai[kaisuu-1];
//         ↑キャストしなくても最初からdoubleにすれば?

if(RATE[kaisuu] ==(double)0)
{
break;
}
}

変なところで改行が入ってしまった・・・すまん


返信引用
ごっほ
 ごっほ
(@ごっほ)
ゲスト
結合: 22年前
投稿: 4
 

if(RATE[kaisuu] ==(double)0)
{
break;
}

の所は、

”RATE[kaisuu](64bit浮動小数点)の仮数部が全部0の時だけbreakしなさい”

という記述だと思います。

RATE[kaisuu]=(double)Atai[kaisuu]-(double)Atai[kaisuu-1];

のように記述されていますが、おそらく浮動小数点の誤差でRATE[kaisuu]が
期待通りに0.0になっていないのだと思います。

浮動小数点でこのような比較をする場合には、許容誤差として
double fDelta = 0.1e-12; //許容誤差

などのようにして、
if(fabs(RATE[kaisuu])<fDelta)
{
break;
}

とするのが良いかと思います。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

>RATE[kaisuu]=(double)Atai[kaisuu]-(double)Atai[kaisuu-1];

希望の値にならない理由は分かりますか、ステップ実行でデバックできますか

> if(RATE[kaisuu] ==(double)0)
「(double)0」はなんのためのキャストでしょうか?

変数に入っている実際の値を示してみてくれませんか

if直前の
RATE[kaisuu]
Atai[kaisuu]
Atai[kaisuu-1]
それぞれのあたい


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ご本人がループと書いているのだから外側にループがあるんだと思いますが、
途中を省略してもループが一見して分かるようにコードの提示をしてほしいですね。
質問している方は自分のコードだから分かるのでしょうが、
レスを付け入る方はコード全体を把握していないので混乱を招くと思いますよ。

woodさんの
>「(double)0」はなんのためのキャストでしょうか?
には賛成。
単に0.0と書けば済むと思いますし。

その他は他の方のアドバイスで十分かな。
まさかと思いますが、抜けるべきループとbreakしている場所が違うところなんて
落ちは無いですよね。


返信引用
務
 務
(@務)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

皆さん
返事遅れまして申し訳ないです。
あの後、自分でも調べていましてゴッホさんにも指摘していただいたような
許容誤差の問題でした。

「(double)0」のキャストは紛らわしくて申し訳ないです。
意味の無いことでした。
>ステップ実行でデバックできますか
有難うございました。とても参考になります。
皆様、本当に有難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました