big.Int を使用する場合、値 0 をテストする必要がある場合があります。標準的な方法これは、Cmp(zero) == 0 を使用して big.Int をゼロと比較することです。ただし、これは、特に迅速で効率的な処理を探している場合には、処理が遅くなる可能性があります。 0 をテストする方法。
幸いなことに、より高速な方法が利用可能です。 1 つの方法は、Int.Bits() 関数を使用することです。この関数は、big.Int の表現の生のバイトを表すバイトのスライスを返します。 0の場合、スライスは空になります。スライスの長さをチェックすることで、big.Int が 0 かどうかをすぐに判断できます。
import "math/big" func isZero(i *big.Int) bool { return len(i.Bits()) == 0 }
あるいは、Int.BitLen() 関数を使用して、big.Int のビット長を返すこともできます。 .Int. 0 の場合、ビット長は 0 になります。
import "math/big" func isZero(i *big.Int) bool { return i.BitLen() == 0 }
これらのメソッドは、Cmp() を使用して big.Int とゼロを比較するよりも大幅に高速です。ベンチマークでは、0 のテストでは 20 倍以上、1 のテストでは 10 倍以上高速であることが示されています。
同様のアプローチを使用すると、 big.Int の値 1 をテストする関数を作成することもできます。この関数は、Int.Bits() によって返されたスライスの長さが 1 で、唯一の要素が 1 であるかどうかをチェックします。さらに、big.Int の符号が正であるかどうかもチェックします。
import "math/big" func isOne(i *big.Int) bool { bits := i.Bits() return len(bits) == 1 && bits[0] == 1 && i.Sign() > 0 }
この方法は、Cmp() を使用して big.Int と 1 を表す big.Int を比較するよりも大幅に高速です。ベンチマークでは、10 倍以上高速であることが示されています。
これらの高速メソッドを利用して、big.Int が 0 か 1 であるかをテストすることで、コードのパフォーマンスを大幅に向上させることができます。
以上がGo で big.Int が 0 か 1 かを効率的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。