[解決済み] 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
.
関連
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み] 配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しない
-
[解決済み] Rubyの除算はなぜ10進数ではなく整数を返すのですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] フォルダが存在しない場合、作成する
-
[解決済み] 整数の割り算の結果を丸めるには?
-
[解決済み】整数を16進数に変換する方法
-
[解決済み】整数の割り算で、別の整数ではなく、浮動小数点が得られるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する