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

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

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

Re[2]: C# Cos 計算


(過去ログ 103 を表示中)

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

■61417 / inTopicNo.1)  C# Cos 計算
  
□投稿者/ terada (19回)-(2011/08/12(Fri) 09:16:39)

分類:[.NET 全般] 

Cosin 90度 を求めようとして
Para1.Cvalue = Math.PI/2;
textBox1.Text = Math.Cos(Para1.Cvalue).ToString();
とすると6.123となるのどうして0でないか??
誰か分かりますか


引用返信 編集キー/
■61419 / inTopicNo.2)  Re[1]: C# Cos 計算
□投稿者/ Azulean (819回)-(2011/08/12(Fri) 10:05:49)
No61417 (terada さん) に返信
> とすると6.123となるのどうして0でないか??

6.123 ではありません。6.12303176911189E-17 です。
この E-17 の部分がポイントで、およそ 10 の -17 乗に 6.123... をかけた数値となり、非常に 0 に近いながらも 0 ではない数値になります。
円周率も、その 1/2 した値も小数として正確に表現できないので、どうしても誤差が残るというところでしょうか。

さて、お望みのことであれば、ToString("f5") というように必要な桁数だけ表示するようにすれば、0.00000 のように 0 と表示されるのではないでしょうか。
引用返信 編集キー/
■61420 / inTopicNo.3)  Re[1]: C# Cos 計算
□投稿者/ Hongliang (798回)-(2011/08/12(Fri) 10:08:00)
6.123 ではなく、6.123(略)e-17 ですよね?
末尾にe-がついているのは指数表記と言って、10 の x 乗分の 1 を表します。つまり、大体 6.123 * (1/100000000000000000) ですから、0.00000000000000006123 ぐらいです(0の数はちゃんと数えてないので一つ二つ間違ってるかも)。
// ちなみにマイナスがつかず e17 とかの場合、10 の 17 乗を掛けた値になります。
Math.PI 自体が誤差を含んでいるので(無理数ですからね)、このくらいは許容範囲ではないでしょうか。

なお、極めて 0 に近い、または極めて大きい値を浮動小数点数が指数表記にされるのを防ぐには、ToString メソッドに書式を渡します。f に精度指定子を付けたりとか。
詳しくは MSDN の書式指定文字列というページを参照してください。
引用返信 編集キー/
■61421 / inTopicNo.4)  Re[2]: C# Cos 計算
□投稿者/ terada (20回)-(2011/08/12(Fri) 10:09:58)
No61420 (Hongliang さん) に返信
> 6.123 ではなく、6.123(略)e-17 ですよね?
> 末尾にe-がついているのは指数表記と言って、10 の x 乗分の 1 を表します。つまり、大体 6.123 * (1/100000000000000000) ですから、0.00000000000000006123 ぐらいです(0の数はちゃんと数えてないので一つ二つ間違ってるかも)。
> // ちなみにマイナスがつかず e17 とかの場合、10 の 17 乗を掛けた値になります。
> Math.PI 自体が誤差を含んでいるので(無理数ですからね)、このくらいは許容範囲ではないでしょうか。
>
> なお、極めて 0 に近い、または極めて大きい値を浮動小数点数が指数表記にされるのを防ぐには、ToString メソッドに書式を渡します。f に精度指定子を付けたりとか。
> 詳しくは MSDN の書式指定文字列というページを参照してください。


ありがとうございます
引用返信 編集キー/
■61422 / inTopicNo.5)  Re[2]: C# Cos 計算
□投稿者/ terada (21回)-(2011/08/12(Fri) 10:10:45)
No61419 (Azulean さん) に返信
> ■No61417 (terada さん) に返信
>>とすると6.123となるのどうして0でないか??
>
> 6.123 ではありません。6.12303176911189E-17 です。
> この E-17 の部分がポイントで、およそ 10 の -17 乗に 6.123... をかけた数値となり、非常に 0 に近いながらも 0 ではない数値になります。
> 円周率も、その 1/2 した値も小数として正確に表現できないので、どうしても誤差が残るというところでしょうか。
>
> さて、お望みのことであれば、ToString("f5") というように必要な桁数だけ表示するようにすれば、0.00000 のように 0 と表示されるのではないでしょうか。

分かりましたありがとうございます
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -