1. ホーム
  2. c#

[解決済み] C#の整数の割り算は、なぜfloatではなく整数を返すのですか?

2022-04-26 02:55:30

質問

C#で整数の割り算をすると、なぜfloatではなく整数が返されるのかご存知の方はいらっしゃいますか? その背景にはどのような考え方があるのでしょうか?(C/C++の遺産だけでしょうか?)

C#の場合。

float x = 13 / 4;   
//== operator is overridden here to use epsilon compare
if (x == 3.0)
   print 'Hello world';

このコードの結果は次のようになります。

'Hello world'

厳密に言えば、整数の割り算というものは存在しない(定義上、割り算は有理数を生成する演算であり、整数はそのうちの非常に小さなサブセットである)。

解き方は?

新米プログラマが、本当は浮動小数点数の除算をするつもりなのに、整数の除算をしてしまうというミスはよくあることですが、実際には整数の除算は非常によく行われる操作です。 めったに使わないし、除算をするたびに浮動小数点にキャストすることを忘れてはいけないと思い込んでいるとしたら、それは大間違いです。

まず、整数の割り算はかなり高速なので、整数の結果だけが必要な場合は、より効率的なアルゴリズムを使用したいと思うでしょう。

次に、整数の割り算を使うアルゴリズムは数多くありますが、割り算の結果が常に浮動小数点数であった場合、毎回結果を丸めることを余儀なくされます。 例えば、数値の底を変更する場合です。 各桁の計算には、浮動小数点数の除算ではなく、整数の除算と余りの計算が含まれます。

これらの理由(および関連する他の理由)により、整数の除算は整数になります。 もし2つの整数の浮動小数点数の除算をしたい場合は、一方を double / float / decimal .