Hi,
ich suche eine Möglichkeit Zahlen dieser größerordnung "34175871510369816576" mit Additionen, Subtraktionen, Multiplikationen und auch Divisionen zu verwenden.
AutoIt kann das nicht ... gibt es vielleicht eine UDF dafür ?
RS
Hi,
ich suche eine Möglichkeit Zahlen dieser größerordnung "34175871510369816576" mit Additionen, Subtraktionen, Multiplikationen und auch Divisionen zu verwenden.
AutoIt kann das nicht ... gibt es vielleicht eine UDF dafür ?
RS
AutoIt kann das nicht ... gibt es vielleicht eine UDF dafür ?
Ja, gibt es...
Danke ...
Wenn es nicht allzu genau sein muss und die Zahlen wirklich exorbitant groß werden (millionen von Stellen groß) kannst du sie auch in der Form a * 10^b speichern (wobei a und b jeweils float64 sind). Dann müsstest du dir die Rechenarten (Add, Sub, Mul, Div, usw) zwar selbst basteln, aber das ist ziemlich einfach. Dabei verliert man natürlich die Genauigkeit, wenn man z.B. 10^500 - 10^10 rechnet wird sich da nicht viel ändern. Addition und Subtraktion funktionieren bis zu einem Unterschied von ca. 10 Kommastellen, Multiplikation und Division funktionieren immer.
Danke für den Hinweis.
Die UDF hilft ... das Provblem ist jetzt nur noch, das Vergleiche 'a > b' im Programm nun geändert werden müssen; bzw. diese Vergleiche anders sein müssen.
Das Programm, das ich habe, hat nur mit Zahlen in Bereich von +/- 10^18 arbeiten müssen ...
jetzt muss ich das Programm auf +/- 10^23 umstricken und stoße so auf gewisse Schwierigkeiten ...
wie macht man das am besten ?
Wenn du mit RegEx umgehen kannst kannst du einfach ein Replace-Pattern drüber laufen lassen und alles automatisch umwandeln.
... das kann ich leider nicht - mit RegEx umgehen ...
Auf dieser Seite findest du auch ein Example.
Hier noch ein Bsp. - vielleicht hilft dir das ja... denn ohne Script kann man nur raten...
#include "BigNum.au3"
; #FUNCTION# ;====================================================================================
;
; Name...........: _BigNum_Compare
; Description ...: Compares $sX $sY
; Syntax.........: _BigNum_Compare($sX, $sY)
; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
; $sY - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
; Return values .: Success - Return:
; |0 - $sX and $sY are equal
; |1 - $sX is greater than $sY
; |-1 - $sX is less than $sY
; Failure - sets @error to 1 if $sX/$sY not valid StringNumber
; Author ........: Eukalyptus www.autoit.de
;
; ;===============================================================================================
; $X = 10000000000000000000 ; warning: Integer found larger than INT64, which could give unintended results.
; $Y = 0.000000000000000001 ; warning: Integer found larger than INT64, which could give unintended results.
$X = 1000000000000000000
$Y = 0.00000000000000001
ConsoleWrite('> $X = ' & $X & ' VarGetType($X) = ' & VarGetType($X) & @CRLF) ; --> 1000000000000000000
ConsoleWrite('> $Y = ' & $Y & ' VarGetType($Y) = ' & VarGetType($Y) & @CRLF) ; --> 1e-017
$X = '10000000000000000001234567773330'
$Y = '0.000000000000000001234567773331'
ConsoleWrite('> $X = ' & $X & ' VarGetType($X) = ' & VarGetType($X) & @CRLF) ; --> 1000000000000000000
ConsoleWrite('> $Y = ' & $Y & ' VarGetType($Y) = ' & VarGetType($Y) & @CRLF) ; --> 0.00000000000000001
$iCompare = _BigNum_Compare($X, $Y)
ConsoleWrite((@error ? _ErrExit('_BigNum_Compare($X, $Y)', @error) : $iCompare = 0 ? '+ $sX and $sY are equal' : $iCompare = 1 ? '- $sX is greater than $sY' : '! $sX is less than $sY') & @CRLF)
ConsoleWrite('> $iCompare = ' & $iCompare & @CRLF)
;~ If $X = $Y Then --> If $iCompare = 0 Then
;~ If $X > $Y Then --> If $iCompare = 1 Then
;~ If $X < $Y Then --> If $iCompare = -1 Then
;~ If $X = $Y Then --> If _BigNum_Compare($X, $Y) = 0 Then
;~ If $X > $Y Then --> If _BigNum_Compare($X, $Y) = 1 Then
;~ If $X < $Y Then --> If _BigNum_Compare($X, $Y) = -1 Then
Func _ErrExit($sErrMsg, $iError, $iScriptLineNumber = @ScriptLineNumber)
ConsoleWrite("@@ Debug line" & @TAB & $iScriptLineNumber & " var: $sErrMsg --> " & $sErrMsg & @CRLF & "!@ " & @TAB & "#Error: " & $iError & @CRLF)
EndFunc
Alles anzeigen
das ist ja was ich gesucht habe ... die Vergleiche !
Danke für das passende Beispiel zur UFD, Bitnugger ... damit kann ich was anfangen
Prima