問題タブ [modulus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cのモジュラス演算子による符号なしオーバーフロー
私が書いたいくつかの C コードでバグが発生しました。修正は比較的簡単でしたが、その根底にある問題をよりよく理解したいと考えています。基本的に何が起こったのかというと、2 つの符号なし整数 (実際には uint32_t) があり、モジュラス演算が適用されたときに、負の数に相当する符号なしの数値、つまりラップされたために「大きい」数値が得られました。以下は、デモ用のプログラム例です。
これにより、x86_64 マシンで次の出力が生成されます。
1536 は私が期待していた数値ですが、(uint32_t)(-512) は私が取得していた数値です。
だから、私の質問はこれだと思います: この場合、2 つの符号なし数値間のモジュラス演算は、除数よりも大きい数値 (つまり、負の数値) を生成するのはなぜですか? この動作が好まれる理由はありますか?
c - Cのモジュラス(数学関数)に相当しますか?
という警告が表示されるコードがあります
符号付きと符号なしの数値を比較しています。
int <= CONSTANT/sizeof(expression) のようなもの
これを修正する最良の方法は何ですか? 符号付き数値のモジュラスを取得してから比較を行うと思いますよね? つまり、式を sizeof 演算子で除算した後、符号なしの数値を取得します。したがって、別の方法として、この rhs を署名済みにすることもできます
もしそうなら、私にこれをさせてくれるcの関数はありますか? 私は簡単な検索を行い、明らかに私が探しているものではないモジュロの % と言っています。
これが実際の警告です
警告: 符号付き整数式と符号なし整数式の比較
これが実際のコード行です
functionA( ......, int num, .....) {
assert( num <= MAX_SIZE/sizeof(int));// MAX_SIZE は #define MAX_SIZE 1000
}
php - 3 回目のループごとに tr を挿入する
PHPでフォーラムを作っています。すべてのフォーラム カテゴリをテーブルに表示する必要があり、そのために while ループを使用しました。ただし、すべてのテーブル行に 3 つの td のみを配置したいと考えています。カテゴリをループするために、クエリで while ループを使用しているため、ここではモジュラスを使用できないと思います。
math - 指数形式の値のモジュロを取得する方法
質問は、非常に大きな数のモジュロ演算子についてです。
たとえば、順列の総数を計算する質問について考えてみます。9つの数字(1から9)のそれぞれが10回繰り返される90桁の数字を考えて、90!/(10!)^9)
計算する必要があります
StackOverflowで多くの回答を読んだ後、対数を使用してそれを行いました。
ここで、ログ値を1923.32877864と見なします。
さて、私の質問は、「m」を法として答え(つまり、10 ^ log10(value))をどのように表示できるかということです。
そして、これは可能な順列の数を計算するための最良の方法ですか?
編集 解決策を手に入れました:)
duedl0rに感謝します。
モジュラ逆数を使用して指定した方法で実行しました。ありがとう :)
c++ - operator% が「剰余」演算子ではなく「モジュラス」演算子と呼ばれるのはなぜですか?
今日、職場で同僚の一人と興味深い話をしました。次のようなことが起こったとき、彼は驚いた。
それで、彼が私にそれについて尋ねに来たとき、私は彼に言いました。 「常に正の」モデル. 私は少し調査を行い、彼が言及していたモジュラスが次のように見えることを発見しました:
q を a と n の整数商とします。r を剰余とします。それで:
a = n * q + r
ただし、私が使用していた定義は、係数のクヌース版のようです。つまり、次のとおりです。
q を n で割った a の床とする。r を剰余とします。それで:
r = a - n * q
それで、私の質問は、モジュラス演算子を0に向かって切り捨てることがFORTRAN標準(およびその後のC標準)で終わったのはなぜですか? それを「剰余」ではなく「モジュラス」と呼ぶのは、私には誤解のように思えます (数学では、答えは実際には 9 になるはずです)。これは、ハードウェアが分割を行う方法に関連していますか?
参考のため:
- モジュラスに関するウィキペディア
- 「modulus」演算子に関する MSDN エントリ
(はい、VS2003 のことを認識しています...私は現在それで立ち往生しています。Sadface) - モジュラス演算子の変更
- 正の剰余を想定しないでください...
TLDR; モジュラス演算子が 0 に向かって切り捨てられる理由はハードウェアですか?
c++ - モジュラスはどのように機能し、Python でほとんどの言語と異なるのはなぜですか?
以下はC++ のコードです。Python のようなものを試すと-2%5
、結果は正の 3 になりますが、c++ C# ( code ) やフラッシュなどの他の多くの言語では -2が返されます。
なぜ彼らは-2を与え、一方のバージョンが他方よりも正しいのですか?
出力:
modulus - 合同な整数と法
私はここのトピックに不慣れです:/誰かが以下を解決する方法を教えてもらえますか?36 ^ 2004 + 17 ^ 768 x 27 ^ 412が19で割り切れることを示します。ありがとう!
php - モジュラスによるソート
uksortを使用してリストを列に並べ替えようとしています。
配列はすでにアルファソートされているので、次のようになりますarray('A','B','C','D','E','F','G','H','I','J','K','L','M')
これは、浮動要素としてhtmlに表示されます。
次のように表示されるように並べ替えます。
したがって、ソートされた配列は次のようになります。array('A','E','H','K','B','F','I','L','C','G','J','M','D'
基本的に、モジュラスを使用してリストをアルファベット順に並べ替えるのと同じですが、php用です。javascriptのソリューションを使用して、それをphpに変換しようとしましたが、うまくいきません。誰もがphpでこれを行う方法について何かアイデアがありますか?
これは私が試したことです:
floating-point - 分母が 0 でない場合、fmod 操作で 64 ビット Windows (C++) で「-1.#IND」が返される
以下の操作を行う場合。
a = 0 および b = 300 の場合、「remainder_fl」は「-1.#IND」に設定されます。これは、Windows リリースの 64 ビット DLL でのみ発生します。デバッグ 64 ビット DLL、および Windows 32 ビット リリースおよびデバッグ DLL では、この問題はまったく見られません。
なぜこれが起こっているのかについて誰かが提案や指針を持っているなら、私はそれを高く評価します.
ありがとう、アッシュ
マシン構成 64 ビット Windows 2008 Std サーバー、最適化されたリリース DLL。