[解決済み] C#の整数演算では、a/b/cは常にa/(b*c)になるのでしょうか?
2023-06-22 05:53:03
質問
a, b, cを大きくない正の整数とする。C#の整数演算でa/b/cは常にa/(b * c)になるのでしょうか? 私の場合、C#では、次のようになります。
int a = 5126, b = 76, c = 14;
int x1 = a / b / c;
int x2 = a / (b * c);
そこで質問なのですが
x1 == x2
はすべてのa,b,cに対応するのでしょうか?
どのように解決するのですか?
次のようにします。
\
は整数の除算を表します(C#の
/
演算子で2つの
int
の間にある) とし
/
は通常の数学の除算を表す。すると、もし
x,y,z
は
正の整数
であり、私たちは
オーバーフローを無視する
,
(x \ y) \ z
= floor(floor(x / y) / z) [1]
= floor((x / y) / z) [2]
= floor(x / (y * z))
= x \ (y * z)
ここで
a \ b = floor(a / b)
行目からのジャンプ
[1]
から行
[2]
を説明すると、次のようになります。仮に二つの整数
a
と
b
と、分数である
f
の範囲で
[0, 1)
. というのは簡単です。
floor(a / b) = floor((a + f) / b) [3]
もし、行内で
[1]
を指定すると
a = floor(x / y)
,
f = (x / y) - floor(x / y)
そして
b = z
であれば
[3]
はそれを意味する
[1]
となり
[2]
は等しい。
この証明を負の整数に一般化することができる(それでも オーバーフローを無視する を無視する)ことができますが、ポイントをシンプルにするため、読者に任せます。
の問題については オーバーフロー - については、Eric Lippert の回答が良い説明になっています! 彼はまた、より厳密なアプローチで 彼のブログ記事 でもっと厳密なアプローチをとっています。私があまりに手探りだと感じたら、ぜひ調べてみてください。
関連
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] JavaScriptで文字列を整数に変換する方法は?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み】2つの整数を1つにマッピングする、一意的かつ決定論的な方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】IntPtrとは一体何なのか?