Herausforderung:
Optimierung von Code, der prüft, ob ein big.Int-Wert vorhanden ist gleich 0.
Lösung:
Mit Schwerpunkt auf Effizienz wird eine direkte Überprüfung der binären Darstellung von big.Int gegenüber dem Vergleich mit einer nullinitialisierten Instanz empfohlen.
big.Int bietet Zugriff auf seine Rohbyte-Darstellung über Int.Bits(). Dieses offengelegte Slice behält einen Verweis auf das zugrunde liegende Array bei und vermeidet so kostspielige Kopien.
Testen auf 0:
Die Dokumentation gibt an, dass der big.Int-Nullwert gleich 0 ist. Daher zeigt ein leeres Bits()-Slice einen Nullwert an, da nil der Nullwert für Slices ist. Diese Prüfung ist schneller als der herkömmliche Vergleich:
if len(i1.Bits()) == 0 { // i1 is 0 }
Alternativ kann Int.BitLen() verwendet werden, da es bestätigt, dass die Bitlänge von 0 0 ist:
if i1.BitLen() == 0 { // i1 is 0 }
Benchmarks:
Vergleichendes Timing zeigt die signifikante Leistung Gewinne:
BenchmarkCompare: 13.3 ns/op BenchmarkBits: 0.656 ns/op BenchmarkBitLen: 1.11 ns/op
Zusätzlicher Hinweis:
Ähnliche Optimierungen können zum Testen angewendet werden, wenn ein big.Int-Wert gleich 1 ist. Obwohl komplexer, müssen beide überprüft werden der Bitinhalt und das Vorzeichen.
Das obige ist der detaillierte Inhalt vonWie kann ich am effizientesten prüfen, ob ein big.Int Null ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!