[解決済み] C/C++/Obj-Cで負の数を扱うモジュロ(%)演算子をコーディングする方法
2023-04-24 13:44:27
質問
C言語由来の言語で(数学者として)私が最も嫌いなものの1つは、以下の点です。
(-1) % 8 // comes out as -1, and not 7
fmodf(-1,8) // fails similarly
最適な解決策は?
C++はテンプレートと演算子のオーバーロードの可能性を認めていますが、この両方は私にとって泥沼です。
どのように解決するのですか?
まず最初に注意しておきたいのは、このように
(-1) % 8 == -1
.あなたが頼れる唯一のものは
(x / y) * y + ( x % y) == x
. ただし、余りが負になるかどうかは
実装で定義されています。
.
参照 C++03 5.6 項の 4:
二項演算子 / は商を、二項演算子 % は最初の式を二番目の式で割った余りを出力します。もし、/や%の2番目のオペランドが0であれば、動作は不定です。そうでなければ、(a/b)*b + a%bはaに等しいです。もし、両方のオペランドが非負であれば、余りは非負になります。 でない場合、余りの符号は実装で定義されたものです。 .
ここでは、両方の負のオペランドを処理するバージョンに従いますので、引き算の結果である
余り
から
除数
から引くことができる。
配当
となるので
階
となり、実際の割り算の
mod(-1,8)
の結果は 7、一方
mod(13, -8)
は-3です。
int mod(int a, int b)
{
if(b < 0) //you can check for b == 0 separately and do what you want
return -mod(-a, -b);
int ret = a % b;
if(ret < 0)
ret+=b;
return ret;
}
関連
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] C言語とC++の両方で有効なコードを、それぞれの言語でコンパイルすると、異なる動作になることがありますか?
-
[解決済み】JavaScriptの%(modulo)は負の数に対して負の結果を与える
-
[解決済み】rand()+rand()で負の数が出るのはなぜ?
-
[解決済み】Pythonで[]演算子をオーバーライドする方法は?
-
[解決済み] Pythonの負の数に対するモジュロ演算
最新
-
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++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] C/C++で標準の符号関数(signum, sgn)はありますか?