ベスト プラクティス: 組み込み関数 math.Mod() を使用して負の数を考慮し、浮動小数点剰余の丸めエラー (math.Remainder()) を回避し、ビット単位の演算を使用してパフォーマンスを向上させます (除数が の場合のみ) 2 のべき乗) 実際のアプリケーション: mod 操作 (剰余の計算) ループ制御 (特定の要素の出力) データ構造 (セット内のハッシュ テーブルとキー マッピング)
# Go 言語の剰余演算のベスト プラクティス
はじめに
Go 言語では、剰余を求める演算子は %
です。使用すると、左のオペランドを右のオペランドで除算し、剰余を結果として返します。剰余演算は、モジュール演算、ループ制御、データ構造など、さまざまなシナリオで広く使用されています。
ベスト プラクティス
1. 組み込みの剰余関数を使用します
単純な剰余計算の場合は、次のことをお勧めします。組み込みの math.Mod
関数を使用します。 %
演算子と同様に、左側のオペランドを右側のオペランドで除算し、剰余を返しますが、予期しない結果を引き起こす可能性のある一部のオーバーフローや丸め動作が回避されます。
import "math" result := math.Mod(10, 3) // result 等于 1
2. 負の数を考慮する
負の数の剰余を計算する場合、%
演算子は予期した結果を生成しない可能性があります。たとえば、Go のモジュロ演算では常に除数と同じ符号の結果が生成されるため、-10 % 3
の結果は 2 ではなく -1 になります。正しい剰余を取得するには、左のオペランドを負でない数値に変換してから、モジュロ演算を実行します。
dividend := -10 result := dividend % 3 if result < 0 { result += 3 } // result 等于 2
3. 丸めエラーの回避#
##浮動小数点数の残りの場合、% 演算子により丸めエラーが発生する可能性があります。これは、コンピュータでは浮動小数点数が 2 進数として表現されるため、除算演算が正確ではない可能性があるためです。この問題を回避するには、
math.Remainder 関数を使用して浮動小数点数の余りを計算します。この関数は、左オペランドと同じ符号を持つ剰余を返すことが保証されています。
dividend := 10.5 divisor := 3.0 result := math.Remainder(dividend, divisor) // result 等于 1.5
4. ビット単位の演算の使用
場合によっては、特に小さい整数が関係する場合、モジュロ演算にビット単位の演算を使用するとパフォーマンスが向上することがあります。n が 2 の累乗である約数の場合、次の式を使用して剰余を計算できます。
remainder := number & (divisor - 1) // 当 divisor 是 2 的幂时
実用的なケース
モジュラー演算
モジュロ演算は、剰余演算の古典的なアプリケーションです。指定された数値を別の数値で割った余りを計算するために使用されます。たとえば、次のコードは 25 を 7 で割ったときの剰余を計算します。remainder := 25 % 7 // remainder 等于 4
ループ制御
剰余演算はループ制御でも使用できます。たとえば、次のコードは 1 から 10 までの奇数を出力します。for i := 1; i <= 10; i++ { if i % 2 == 1 { fmt.Println(i) } }
データ構造
ハッシュ テーブルやセットなどのデータ構造では、剰余演算が使用されます。バケットまたはコレクション内の特定の場所にキーを変換します。たとえば、次のコードはハッシュ テーブル内のキーを検索します:hashValue := key % tableSize // 计算哈希值 entry := table[hashValue] // 从哈希表中获取对应的条目
以上がGo言語での剰余演算のベストプラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。