Die Python-Funktion pow()
akzeptiert 2 oder 3 Argumente. In Ihrem Fall pow(x,y,z)
tut x
Leistung y
und wendet ein Modulo z
auf das Ergebnis an. Aber die documentation ist eindeutig:
Wenn das zweite Argument negativ ist, muss das dritte Argument weggelassen werden. Wenn z vorhanden ist, müssen x und y ganzzahlige Typen sein, und y muss nicht negativ sein.
So:
Ihr erster Anruf funktioniert gut, weil die Argumente mit den Anforderungen entsprechen. Beachten Sie, dass trotz pow(2,6000)
eine große Zahl ist, das Ergebnis der kombinierten Modulo-Operation kann einfach ohne Überlauf berechnet werden, durch Verwendung von Eigenschaften auf modular exponentiation von ganzen Zahlen.
Ihr zweiter Aufruf schlägt mit einem Fehler fehl, weil das erste Argument keine ganze Zahl ist. Die Problemumgehung wäre, Ihre Operation in pow(1.4142,6000) % 400
zu zerlegen, da modulo für reelle Zahlen definiert ist.
Leider ist pow(1.4142,6000)
zu groß und verursacht einen Überlauffehler. Dies liegt daran, dass im Gegensatz zu den Python-Integern, die von unbegrenzter Reichweite sind, real numbers are limited durch den Bereich der C-Gleitkomma-Codierung.
P. S .: Ich nahm an, dass es über Python und nicht VB, weil VB's pow()
nur zwei Argumente akzeptiert.
Edit: Hinweis für eine Abhilfe
Hier ein wenig Abhilfe, die sich die Tatsache zunutze macht, dass eine Fließkommazahl ist keine mathematische echte unbegrenzter Präzision, sondern eine rationale Zahl technisch. Wir können dann die Verwendung des Zähler und Nenner machen und Integer-Operationen verwenden, um die große Zahl zu meistern:
n=pow(14142,6000) # take the first argument multiplied by a 10 exponent to make it an integer
d=pow(10000,6000) # keep track of this 10 exponent
i=n//d # integer division to compute the integral value
r=n-d*i # remainder of the integer division
precision=6 # precision
f=r*pow(10,precision)//d # keep the 6 most significant digits
result=(i%400)+(f/pow(10,precision))
Das Ergebnis 271,048181 an die 6. Stelle ist. Ich lasse Sie als Übung das Schreiben einer Funktion, die dies auf eine weniger handwerkliche Weise durchführt.
Welche Programmiersprache verwenden Sie? –
verwende nur VB und Python – Amy