C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C#繰り返し計算


(過去ログ 103 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■61515 / inTopicNo.1)  C#繰り返し計算
  
□投稿者/ terada (22回)-(2011/08/18(Thu) 08:57:32)

分類:[.NET 全般] 

Para1.Toalhone[Para1.ModSw] = Para1.Ehonetu[1] + Para1.Ehonetu[ 2] + Para1.Ehonetu[ 3] +Para1.Ehonetu[ 4] + Para1.Ehonetu[ 5] + Para1.Ehonetu[ 6]+Para1.Ehonetu[ 7] +    Para1.Ehonetu[ 8] + Para1.Ehonetu[ 9] +Para1.Ehonetu[10] + Para1.Ehonetu[11] ;



for (int i = 1; i <= 11; i++) //半導体データを変数に代入します。
{

Para1.Toalhone[Para1.ModSw] = Para1.Toalhone[Para1.ModSw] + Para1.Ehonetu[i];

} なぜかこれだけだとエラーになる原因不明

上記1から11までの配列の足し算、上のように単純に足すとOKなのにfor にするとNaN(非数値)になってしまいます原因を教えてください

引用返信 編集キー/
■61516 / inTopicNo.2)  Re[1]: C#繰り返し計算
□投稿者/ shu (941回)-(2011/08/18(Thu) 09:05:06)
No61515 (terada さん) に返信

Para1.Toalhone[Para1.ModSw] = 0;
をforの前に書けばいいんじゃないかな?
型がわからないので型に合わせて置き換えて下さい。
引用返信 編集キー/
■61517 / inTopicNo.3)  Re[2]: C#繰り返し計算
□投稿者/ terada (23回)-(2011/08/18(Thu) 09:12:53)
No61516 (shu さん) に返信
> ■No61515 (terada さん) に返信
>
> Para1.Toalhone[Para1.ModSw] = 0;
> をforの前に書けばいいんじゃないかな?
> 型がわからないので型に合わせて置き換えて下さい。



ありがとうございました、解決しました
解決済み
引用返信 編集キー/
■61518 / inTopicNo.4)  Re[1]: C#繰り返し計算
□投稿者/ 魔界の仮面弁士 (2313回)-(2011/08/18(Thu) 09:24:39)
2011/08/18(Thu) 09:27:22 編集(投稿者)

問題は解決したようですが、デバッグの手法という事で:

No61515 (terada さん) に返信
> for (int i = 1; i <= 11; i++) //半導体データを変数に代入します。
> {
>   Para1.Toalhone[Para1.ModSw] = Para1.Toalhone[Para1.ModSw] + Para1.Ehonetu[i];
> } なぜかこれだけだとエラーになる原因不明
具体的には何というエラーだったのでしょうか。
(NaN の代入自体は、例外を発生させませんよね)


> for にするとNaN(非数値)になってしまいます原因を教えてください
原因箇所を特定する方法という事で:

NaN になることが問題であれば、ループ処理の
 Para1.Toalhone[Para1.ModSw] = Para1.Toalhone[Para1.ModSw] + Para1.Ehonetu[i];
の行にブレークポイントを貼り、そのブレークポイントを右クリックして
『条件』ダイアログに『double.IsNaN(Para1.Toalhone[Para1.ModSw] + Para1.Ehonetu[i])』
という条件を付与しておけば、i の値が幾つの時に NaN となってしまうのかを
特定する事ができるはずです。

なお、Visual C# の Express をお使いの場合には、ブレークポイントに
条件を指定できませんので、その場合はループ処理の部分を

for (int i = 1; i <= 11; i++)
{
  System.Diagnostics.Debug.Assert(!double.IsNaN(Para1.Toalhone[Para1.ModSw] + Para1.Ehonetu[i]));

  Para1.Toalhone[Para1.ModSw] = Para1.Toalhone[Para1.ModSw] + Para1.Ehonetu[i];
}

のようにしておくと、NaN が代入されそうになる直前で
[中止]、[再試行]、[無視]のダイアログが表示されるようになります。

・[中止]を選ぶと、アプリケーションの実行が中断されます。

・[無視]を選ぶと、そのまま次の行から実行が再開されます(つまり、NaNが代入される)。

・[再試行]を選ぶと、Assert の行がデバッグ状態で一時中断されますので、
 それぞれの変数の内容を確認したり、値を変更してから実行を再開するなどの
 デバッグ作業が行えます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -