2017-01-14 5 views
0

In meiner Antwort auf die Frage hier: https://math.stackexchange.com/questions/2093497/finding-number-of-coprime-tuples-from-1-to-n/2094773#2094773 auf Math SE, ich bin derzeit einen Laufzeitfehler auf der Linie erhalten:VBA-Laufzeitfehler 6 Überlauf - warum passiert das?

P=599*601 

Fehlermeldung Laufzeitfehler 6 Überlauf

P ist definiert als ein öffentlich Variable vom Typ double. Ich habe auch p in meiner "Modulo" -Funktion verwendet, definiert als ein Doppel.

Warum passiert das und was kann ich tun, um es zu korrigieren?

Ich habe eine Abhilfe gefunden: Wenn ich die angegebene Zeile zu ändern, anstatt zu haben:

P=359999 

Dann wird der Fehler nicht auftritt. Warum gibt also die Zeile P = 599 * 601 einen Fehler?

+0

'P' ist doppelt? Warum ? in Ihrem Fall sollten Sie es 'As Long' haben, lesen Sie mehr über Datentypen hier: https://msdn.microsoft.com/en-us/library/47zceaw7.aspx –

+0

Also muss ich beide Datentypen zu lang für ändern p? - also in "Public P als Double" und in der Modulo-Funktion "p als Double"? –

+0

Frage aktualisiert, bitte überprüfen Sie –

Antwort

0

Nach Recherchen fand ich, dass diese Marotte kann über den folgenden Code gelöst werden:

Dim Prime1 as Long 
Dim Prime2 as Long 
Public P as Long 
... 
P=Prime1 * Prime2 

Ursache des Problems wahrscheinlich aufgrund Zuordnung von Integer-Typ p aufgrund Zahlen als ganze Zahlen multipliziert.

+0

Die Ursache liegt daran, dass '599' und' 601' Integer sind, also versucht eine Berechnung von 'Integer * Integer' ein 'Integer'-Ergebnis zu liefern und überläuft. Solange eine der beiden Zahlen ein 'Long' ist (zB' P = 599 & * 601', oder 'P = 599 * 601 &', oder 'P = CLng (599) * 601', usw.), würde die Berechnung erfolgen Arbeit. Nachdem die Berechnung beendet ist, wird das Ergebnis in "P" gesetzt, so dass zu keinem Zeitpunkt "P" als "Integer" behandelt wird, sondern nur die Zwischenrechnung. – YowE3K

Verwandte Themen