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

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

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

Re[2]: かけ算よりも割り算の方がけた落ちしやすい理由


(過去ログ 177 を表示中)

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

■101796 / inTopicNo.1)  かけ算よりも割り算の方がけた落ちしやすい理由
  
□投稿者/ もあ (1回)-(2023/04/21(Fri) 15:36:39)

分類:[.NET 全般] 


VB.NETに関する質問ですが、

以下のコードで、

Dim A As Double
Dim B As Double

Dim C As Double = 100 * A / B
Dim C As Double = 100 / (B / A)


最後の二つの式は等価なはずなのですが、
二つ目の割り算の式を使うとけた落ちして正確な結果を返さないことがあります。

なぜかけ算よりも割り算の方がけた落ちしやすくなるのでしょうか?



引用返信 編集キー/
■101797 / inTopicNo.2)  Re[1]: かけ算よりも割り算の方がけた落ちしやすい理由
□投稿者/ furu (205回)-(2023/04/21(Fri) 16:34:03)
No101796 (もあ さん) に返信
> なぜかけ算よりも割り算の方がけた落ちしやすくなるのでしょうか?
10進数の計算でも
掛け算はけた落ちしないけど
割り算は無限小数になると桁落ちする。

二つ目は2回も割り算があるのでけた落ちのけた落ちになる。

AとBの値(近いとか)によることも多い。
引用返信 編集キー/
■101798 / inTopicNo.3)  Re[2]: かけ算よりも割り算の方がけた落ちしやすい理由
□投稿者/ Angolmois (9回)-(2023/04/21(Fri) 17:09:08)
2023/04/21(Fri) 17:58:03 編集(投稿者)

No101796 (もあ さん) に返信
なぜかけ算よりも割り算の方がけた落ちしやすくなるのでしょうか?

turuさんの答えと同じ事なのですが、そういうものなんです。
掛け算をすると精度が何も落ちませんが、割り算では割り切れなかったり循環小数になったりしますよね。

十進数でも二進数・十六進数でも同じですが、循環小数になったりすると限りある桁数で表現しきれなくなるのはご存知と思います。

ですので、プログラミングの世界では、こういう場合は先に掛け算をしてから、最後に割り算をする様に心がけなければなりません。
(私の場合はン十年前に学校でプログラミングを習った時にこれを一番に教えられましたので覚えています。)
これで精度を維持する様にしますので、もあさんも本件をしっかり身につけて頂ければと思います。

引用返信 編集キー/
■101799 / inTopicNo.4)  Re[3]: かけ算よりも割り算の方がけた落ちしやすい理由
□投稿者/ Angolmois (10回)-(2023/04/21(Fri) 17:40:12)
2023/04/21(Fri) 17:45:25 編集(投稿者)

No101796 (もあ さん) に返信

もあさんの質問文そのままをGPT先生に聞いてみました。w

----------
浮動小数点数は、一定の桁数で表現されるため、計算結果がその桁数よりも大きな値になると、最下位桁を切り捨てる必要があります。これが「けた落ち」と呼ばれる現象です。

割り算は、小数点以下の桁数が大きくなる可能性があります。例えば、100を0.0001で割る場合、結果は1000000となります。しかし、浮動小数点数は有限の桁数で表現されるため、1000000は最下位桁を切り捨てられ、正確な値である0.01にはなりません。

一方、かけ算は、小数点以下の桁数が大きくなることはありません。例えば、100を0.0001倍する場合、結果は0.01になります。このように、かけ算では最下位桁を切り捨てる必要がないため、割り算に比べて「けた落ち」が起こりにくいと言えます。

以上のように、割り算に比べてかけ算の方が「けた落ち」が起こりにくいため、二つ目の式を使うと正確な結果を返すことができます。
----------
引用返信 編集キー/
■101805 / inTopicNo.5)  Re[1]: かけ算よりも割り算の方がけた落ちしやすい理由
□投稿者/ HattariB (69回)-(2023/04/22(Sat) 00:50:41)
No101796 (もあ さん) に返信
> VB.NETに関する質問ですが、
VB.NETに限ったわけではないんですが、

> 二つ目の割り算の式を使うとけた落ちして正確な結果を返さないことがあります。
浮動小数点というのは、演算結果によって小数点の位置が変わる、近似値なので、
正確な結果を返す事があっても、そっちのほうが偶然ですよ。
正確な結果を返す事の方が珍しいです。
ちなみに掛け算でも、ビット数を超えるような演算が行われた場合は、小数点の位置が変わるから精度が落ちます。

つか、四則演算で精度を変えながら近似値を得るのが浮動小数点のはずなんだけどなぁ。。。

VB.NETって違うの???
引用返信 編集キー/
■101809 / inTopicNo.6)  Re[2]: かけ算よりも割り算の方がけた落ちしやすい理由
□投稿者/ もあ (2回)-(2023/04/24(Mon) 08:28:07)
ありがとうございます。

納得しました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -