Hohe Zahlen potenzieren

  • weiß einer von euch zufällig wie man hohe Zahlen potenzieren kann?
    also so im Stil der BigNum.au3...
    ich bräuchte des mal^^
    ich bin grad schon die ganze zeit am rumprobieren aber ich hab irgendwie keinen erfolg

    Padmak

  • Ähm wenns bei der BigNum.au3 geht dann machs doch damit. Kannst die mal Posten?
    Ansonsten weiß ichs nicht.

  • ja moment ich glaub ich habs iwie rausgekriegt
    kanns sein dass bei 2^3^33 (ich hab mit nem freund gewettet dass ich es schaff es auszurechnen^^)
    633825300114114700748351602688 raukommt?
    beim normalen rechnen krieg ich 6.33825300114115e+029
    und wenn ichs per

    [autoit]


    If 633825300114114700748351602688 < 6.33825300114115e+029 Then
    MsgBox(0, "", "1")
    Else
    MsgBox(0, "", "2")
    EndIf

    [/autoit]


    vergleich kommt die MsgBox mit 1...
    Gerechnet hab ichs per

    Spoiler anzeigen
    [autoit]


    Global $hoch = 1
    $hochanfang = 8
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)
    $hoch = _BigNum_Mul($hoch, $hochanfang)

    [/autoit]

    Padmak

  • ich auch^^
    mir geht nur grad der theoretische ansatz ab^^
    wenn ichs per *= mach bekomm ich 0 zurück-.-

    Padmak

  • Juhu ich habs. Also mit 500 hoch 500 gings^^ War garnicht so schwer^^ Nur bisschen logisch denken. Geht halt nur 1 Faktor bis jetzt.

  • So klappts auch mit Faktor 1^^:

    Spoiler anzeigen
    [autoit]

    Global Const $BigNum_Debug=False

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_Potenz($sX,$sFaktor)
    If $sFaktor = 1 Then Return $sX
    $Return = _BigNum_Mul($sX,$sX)
    For $i = 1 To $sFaktor -2
    $Return = _BigNum_Mul($Return,$sX)
    Next
    Return $Return
    EndFunc
    MsgBox(0,"",_BigNum_Potenz(5,3)) ; Beispiel

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #INDEX# =======================================================================================================================
    ; Title .........: BigNum
    ; AutoIt Version : 3.2.12.1
    ; Language ......: English
    ; Description ...: Perform calculations with big numbers
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    ; #CURRENT# =====================================================================================================================
    ;_BigNum_Add
    ;_BigNum_Sub
    ;_BigNum_Mul
    ;_BigNum_Div
    ;_BigNum_Mod
    ;_BigNum_Round
    ;_BigNum_Compare
    ;_BigNum_Swap
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    ; #INTERNAL_USE_ONLY#============================================================================================================
    ;_BigNum_CheckNegative
    ;_BigNum_DivAdd
    ;_BigNum_DivComp
    ;_BigNum_DivSub
    ;_BigNum_Div_DivisorGreater14
    ;_BigNum_Div_DivisorMaxLen14
    ;_BigNum_InsertDecimalSeparator
    ;_BigNum_StringIsDecimal
    ;_BigNum_IsValid
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ;====================================================================================
    ;
    ; Name...........: _BigNum_Add
    ; Description ...: Addition $sX + $sY
    ; Syntax.........: _BigNum_Add($sX, $sY)
    ; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; $sY - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; Return values .: Success - Result $sX + $sY
    ; Failure - 0, sets @error to 1 if $sX/$sY not valid StringNumber
    ; Author ........: Eukalyptus http://www.autoit.de
    ;
    ; ;===============================================================================================
    Func _BigNum_Add($sX, $sY)
    If _BigNum_IsValid($sX, $sY) Then Return SetError(1, 0, 0)
    Local $iNeg = _BigNum_CheckNegative($sX, $sY), $sNeg = ""
    If $iNeg = 3 Then $sNeg = "-"
    If $iNeg = 1 Then Return _BigNum_Sub($sY, $sX)
    If $iNeg = 2 Then Return _BigNum_Sub($sX, $sY)
    If $BigNum_Debug Then Local $BN_File=FileOpen(@ScriptDir & "\BigNum_Debug.txt",2)
    Local $iDec = _BigNum_StringIsDecimal($sX, $sY)
    Local $iTmp = StringLen($sX), $iLen = StringLen($sY), $iCar = 0, $sRet = ""
    If $BigNum_Debug Then FileWrite($BN_File," " & _BigNum_DS($iLen-$iTmp,"0") & $sX & " + " & @CRLF & " " & _BigNum_DS($iTmp-$iLen,"0") & $sY & @CRLF)
    If $iLen < $iTmp Then $iLen = $iTmp
    If $BigNum_Debug Then FileWrite($BN_File," " & _BigNum_DS($iLen,"-") & @CRLF)
    For $i = 1 To $iLen Step 18
    $iTmp = Int(StringRight($sX, 18)) + Int(StringRight($sY, 18)) + $iCar
    $sX = StringTrimRight($sX, 18)
    $sY = StringTrimRight($sY, 18)
    If ($iTmp > 999999999999999999) Then
    $iTmp = StringRight($iTmp, 18)
    $sRet = $iTmp & $sRet
    If $BigNum_Debug Then FileWrite($BN_File,_BigNum_DS($iLen-$i-StringLen($iTmp)+2) & $iTmp & _BigNum_DS($i) & "+" & $iCar & @CRLF)
    $iCar = 1
    Else
    If $BigNum_Debug Then FileWrite($BN_File,_BigNum_DS($iLen-$i-StringLen($iTmp)+2) & $iTmp & _BigNum_DS($i) & "+" & $iCar & @CRLF)
    $iTmp = StringRight("000000000000000000" & $iTmp, 18)
    $sRet = $iTmp & $sRet
    $iCar = 0
    EndIf
    Next
    $sRet = StringRegExpReplace($iCar & $sRet, "^0+([^0]|0$)", "\1", 1)
    If $iDec > 0 Then $sRet = _BigNum_InsertDecimalSeparator($sRet, $iDec, $iDec)
    If $sRet = "0" Then $sNeg = ""
    If $BigNum_Debug Then
    FileWrite($BN_File," " & _BigNum_DS($iLen,"-") & @CRLF)
    FileWrite($BN_File,_BigNum_DS($iLen - StringLen($sRet)+1) & $sRet)
    FileClose($BN_File)
    EndIf
    Return $sNeg & $sRet
    EndFunc ;==>_BigNum_Add

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ;====================================================================================
    ;
    ; Name...........: _BigNum_Sub
    ; Description ...: Subtraction $sX - $sY
    ; Syntax.........: _BigNum_Sub($sX, $sY)
    ; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; $sY - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; Return values .: Success - Result $sX - $sY
    ; Failure - 0, sets @error to 1 if $sX/$sY not valid StringNumber
    ; Author ........: Eukalyptus http://www.autoit.de
    ;
    ; ;===============================================================================================
    Func _BigNum_Sub($sX, $sY)
    If _BigNum_IsValid($sX, $sY) Then Return SetError(1, 0, 0)
    Local $iNeg = _BigNum_CheckNegative($sX, $sY), $bNeg = False
    If $iNeg = 3 Then Return _BigNum_Add("-" & $sX, $sY)
    If $iNeg = 1 Then Return "-" & _BigNum_Add($sX, $sY)
    If $iNeg = 2 Then Return _BigNum_Add($sX, $sY)
    If $BigNum_Debug Then Local $BN_File=FileOpen(@ScriptDir & "\BigNum_Debug.txt",2)
    Local $iDec = _BigNum_StringIsDecimal($sX, $sY)
    If _BigNum_Compare($sX, $sY) = -1 Then $bNeg = _BigNum_Swap($sX, $sY)
    Local $iTmp = StringLen($sX), $iLen = StringLen($sY), $iCar = 0, $sRet = ""
    If $BigNum_Debug Then FileWrite($BN_File," " & _BigNum_DS($iLen-$iTmp,"0") & $sX & " - " & @CRLF & " " & _BigNum_DS($iTmp-$iLen,"0") & $sY & @CRLF)
    If $iLen < $iTmp Then $iLen = $iTmp
    If $BigNum_Debug Then FileWrite($BN_File," " & _BigNum_DS($iLen,"-") & @CRLF)
    For $i = 1 To $iLen Step 18
    $iTmp = Int(StringRight($sX, 18)) - Int(StringRight($sY, 18)) - $iCar
    $sX = StringTrimRight($sX, 18)
    $sY = StringTrimRight($sY, 18)
    If $iTmp < 0 Then
    $iTmp = 1000000000000000000 + $iTmp
    If $BigNum_Debug Then FileWrite($BN_File,_BigNum_DS($iLen-$i-StringLen($iTmp)+2) & $iTmp & _BigNum_DS($i) & "-" & $iCar & @CRLF)
    $iCar = 1
    Else
    If $BigNum_Debug Then FileWrite($BN_File,_BigNum_DS($iLen-$i-StringLen($iTmp)+2) & $iTmp & _BigNum_DS($i) & "-" & $iCar & @CRLF)
    $iCar = 0
    EndIf
    $sRet = StringRight("0000000000000000000" & $iTmp, 18) & $sRet
    Next
    $sRet = StringRegExpReplace($iCar & $sRet, "^0+([^0]|0$)", "\1", 1)
    If $iDec > 0 Then $sRet = _BigNum_InsertDecimalSeparator($sRet, $iDec, $iDec)
    If $BigNum_Debug Then
    FileWrite($BN_File," " & _BigNum_DS($iLen,"-") & @CRLF)
    FileWrite($BN_File,_BigNum_DS($iLen - StringLen($sRet)+1) & $sRet)
    FileClose($BN_File)
    EndIf
    If $bNeg = True And $sRet <> "0" Then
    Return "-" & $sRet
    Else
    Return $sRet
    EndIf
    EndFunc ;==>_BigNum_Sub

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ;====================================================================================
    ;
    ; Name...........: _BigNum_Mul
    ; Description ...: Multiplication $sX * $sY
    ; Syntax.........: _BigNum_Mul($sX, $sY)
    ; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; $sY - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; Return values .: Success - Result $sX * $sY
    ; Failure - 0, sets @error to 1 if $sX/$sY not valid StringNumber
    ; Author ........: Eukalyptus http://www.autoit.de
    ;
    ; ;===============================================================================================
    Func _BigNum_Mul($sX, $sY)
    If _BigNum_IsValid($sX, $sY) Then Return SetError(1, 0, 0)
    Local $iNeg = _BigNum_CheckNegative($sX, $sY), $sNeg = ""
    Local $iDec = _BigNum_StringIsDecimal($sX, $sY)
    If $BigNum_Debug Then
    Local $BN_File=FileOpen(@ScriptDir & "\BigNum_Debug.txt",2), $BN_X=StringLen($sX)
    FileWrite($BN_File," " & $sX & " * " & $sY & " = " & @CRLF)
    FileWrite($BN_File," " & _BigNum_DS($BN_X+StringLen($sY)+3,"-") & @CRLF)
    EndIf
    Local $aX = StringRegExp($sX, '\A.{' & 6 - (Ceiling(StringLen($sX) / 6) * 6 - StringLen($sX)) & '}|.{6}+', 3)
    Local $aY = StringRegExp($sY, '\A.{' & 6 - (Ceiling(StringLen($sY) / 6) * 6 - StringLen($sY)) & '}|.{6}+', 3)
    Local $aRet[UBound($aX) + UBound($aY) - 1]
    For $j = 0 To UBound($aX) - 1
    For $i = 0 To UBound($aY) - 1
    If $BigNum_Debug Then
    FileWrite($BN_File," " & _BigNum_DS(StringLen($aX[0])+$j*6-StringLen($aX[$j])) & $aX[$j] & _BigNum_DS($BN_X-(StringLen($aX[0])+$j*6)) & " * " & _BigNum_DS(StringLen($aY[0])+$i*6-StringLen($aY[$i])) & $aY[$i])
    FileWrite($BN_File," " & _BigNum_DS(((UBound($aY)-1-$i)*6)+($i*15+$j*15)) & $aX[$j] * $aY[$i] & @CRLF)
    EndIf
    $aRet[$j + $i] += $aX[$j] * $aY[$i]
    Next
    Next
    If $BigNum_Debug Then
    FileWrite($BN_File," " & _BigNum_DS($BN_X+StringLen($sY)+3) & _BigNum_DS($i*15+$j*15,"-") & @CRLF)
    FileWrite($BN_File," " & _BigNum_DS($BN_X+StringLen($sY)+6))
    For $i=0 to UBound($aRet)-1
    FileWrite($BN_File, $aRet[$i] & _BigNum_DS(15-StringLen($aRet[$i])))
    Next
    FileWrite($BN_File,@CRLF & @CRLF)
    For $i=0 to UBound($aRet)-1
    FileWrite($BN_File,_BigNum_DS($BN_X+StringLen($sY)) & _BigNum_DS($i*6+15-StringLen($aRet[$i])) & $aRet[$i] & @CRLF)
    Next
    FileWrite($BN_File,_BigNum_DS($BN_X+StringLen($sY)) & _BigNum_DS(15-StringLen($aRet[0])) & _BigNum_DS($i*6,"-") & @CRLF)
    EndIf
    Local $sRet = "", $iCar = 0, $iTmp
    For $i = UBound($aRet) - 1 To 0 Step -1
    $aRet[$i] += $iCar
    $iCar = Floor($aRet[$i] / 1000000)
    $iTmp = Mod($aRet[$i], 1000000)
    If $iTmp <= 1000000 Then $iTmp = StringRight("000000" & $iTmp, 6)
    $sRet = $iTmp & $sRet
    Next
    If $iCar > 0 Then $sRet = $iCar & $sRet
    $sRet = StringRegExpReplace($sRet, "^0+([^0]|0$)", "\1", 1)
    If ($iNeg = 1 Or $iNeg = 2) And $sRet <> "0" Then $sNeg = "-"
    If $iDec > 0 Then $sRet = _BigNum_InsertDecimalSeparator($sRet, $iDec * 2, $iDec * 2)
    If $BigNum_Debug Then
    FileWrite($BN_File,_BigNum_DS($BN_X+StringLen($sY)) & _BigNum_DS(15-StringLen($aRet[0])) & $sRet)
    FileClose($BN_File)
    EndIf
    Return $sNeg & $sRet
    EndFunc ;==>_BigNum_Mul

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ;====================================================================================
    ;
    ; Name...........: _BigNum_Div
    ; Description ...: Division $sX / $sY
    ; Syntax.........: _BigNum_Div($sX, $sY, [$iD = 0])
    ; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; $sY - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; $iD [optional] - Number of Decimalplaces
    ; Return values .: Success - Result $sX / $sY
    ; Failure - 0, sets @error to 1 if $sX/$sY not valid StringNumber
    ; Author ........: Eukalyptus http://www.autoit.de
    ;
    ; ;===============================================================================================
    Func _BigNum_Div($sX, $sY, $iD = 0)
    If _BigNum_IsValid($sX, $sY) Then Return SetError(1, 0, 0)
    Local $iNeg = _BigNum_CheckNegative($sX, $sY), $sNeg = ""
    Local $iDec = _BigNum_StringIsDecimal($sX, $sY), $sMod
    If $sX = 0 Or $sY = 0 Then Return "0"
    If $sY = "1" Then Return $sNeg & $sX
    While StringLeft($sX,1)="0"
    $sX=StringTrimLeft($sX,1)
    $iDec+=1
    WEnd
    While StringLeft($sY,1)="0"
    $sY=StringTrimLeft($sY,1)
    $iDec+=1
    WEnd
    Local $sRet = "", $iLnX = StringLen($sX), $iLnY = StringLen($sY), $iTmp, $iCnt, $sTmp, $iDe1 = 0
    If $iD > 0 Then $iDe1 += $iD
    If $iNeg = 1 Or $iNeg = 2 Then $sNeg = "-"
    $iTmp = _BigNum_Compare($sX, $sY)
    If $iTmp = -1 Then
    For $iCnt = $iLnX To $iLnY
    $sX &= 0
    $iDe1 += 1
    Next
    EndIf
    If $iTmp = 0 Then Return $sNeg & "1"
    If $iD = -1 Then $iD = $iDec * 2
    For $iCnt = 1 To $iD
    $sX &= "0"
    Next
    If $iLnY > 14 Then
    $sRet = _BigNum_Div_DivisorGreater14($sX, $sY, $sMod)
    Else
    $sRet = _BigNum_Div_DivisorMaxLen14($sX, $sY, $sMod)
    EndIf
    If $iDe1 > 0 Then $sRet = _BigNum_InsertDecimalSeparator($sRet, $iDe1, $iD)
    If $sRet = "0" Then
    Return "0"
    Else
    Return $sNeg & $sRet
    EndIf
    EndFunc ;==>_BigNum_Div

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ;====================================================================================
    ;
    ; Name...........: _BigNum_Mod
    ; Description ...: Modulo Mod($sX, $sY)
    ; Syntax.........: _BigNum_Mod($sX, $sY)
    ; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; $sY - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; Return values .: Success - Result Mod($sX, $sY)
    ; Failure - 0, sets @error to 1 if $sX/$sY not valid StringNumber
    ; Author ........: Eukalyptus http://www.autoit.de
    ;
    ; ;===============================================================================================
    Func _BigNum_Mod($sX, $sY)
    If _BigNum_IsValid($sX, $sY) Then Return SetError(1, 0, 0)
    If $sY = 0 Or $sY = 1 Then Return "0"
    Local $sRes = $sX
    Local $iNeg = _BigNum_CheckNegative($sX, $sY)
    Local $iDec = _BigNum_StringIsDecimal($sX, $sY)
    If _BigNum_Compare($sX, $sY) < 0 Then Return $sRes
    Local $sRet = "", $iLnX = StringLen($sX), $iLnY = StringLen($sY)
    If $iLnY > 14 Then
    _BigNum_Div_DivisorGreater14($sX, $sY, $sRet)
    Else
    _BigNum_Div_DivisorMaxLen14($sX, $sY, $sRet)
    EndIf
    $sRet = _BigNum_InsertDecimalSeparator($sRet, $iDec, StringLen($sRet))
    If ($iNeg = 3 Or $iNeg = 1) And $sRet <> "0" Then $sRet = "-" & $sRet
    Return $sRet
    EndFunc ;==>_BigNum_Mod

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ;====================================================================================
    ;
    ; Name...........: _BigNum_Round
    ; Description ...: Round $sX to $iD Decimalplaces
    ; Syntax.........: _BigNum_Round($sX, $iD)
    ; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; $iD - Number of Decimalplaces
    ; Return values .: Success - Result Round($sX, $iD)
    ; Failure - 0, sets @error to 1 if $sX not valid StringNumber
    ; Author ........: Eukalyptus http://www.autoit.de
    ;
    ; ;===============================================================================================
    Func _BigNum_Round($sX, $iD)
    If _BigNum_IsValid($sX, $sX) Then Return SetError(1, 0, 0)
    Local $sTmp = 0, $sRet, $sRes = $sX
    Local $iNeg = _BigNum_CheckNegative($sX, $sTmp)
    Local $iDec = _BigNum_StringIsDecimal($sX, $sTmp)
    If $iD > $iDec Or $iDec = 0 Then Return $sRes
    $sTmp = StringLeft(StringRight($sX, $iDec - $iD), 1)
    $sRet = StringTrimRight($sRes, $iDec - $iD)
    If $sTmp >= 5 And $iD > 0 Then
    If $iNeg = 1 Then
    $sRet = _BigNum_Add($sRet, "-0." & StringFormat("%0" & String($iD) & "u", "1"))
    Else
    $sRet = _BigNum_Add($sRet, "0." & StringFormat("%0" & String($iD) & "u", "1"))
    EndIf
    ElseIf $sTmp >= 5 And $iD = 0 Then
    If $iNeg = 1 Then
    $sRet = _BigNum_Add($sRet, "-1")
    Else
    $sRet = _BigNum_Add($sRet, "1")
    EndIf
    Else
    If StringRight($sRet, 1) = "." Then $sRet = StringTrimRight($sRet, 1)
    EndIf
    Return $sRet
    EndFunc ;==>_BigNum_Round

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #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 http://www.autoit.de
    ;
    ; ;===============================================================================================
    Func _BigNum_Compare($sX, $sY)
    Local $iNeg = _BigNum_CheckNegative($sX, $sY)
    If $iNeg = 1 Then Return -1
    If $iNeg = 2 Then Return 1
    Local $iLnX = StringLen($sX), $iLnY = StringLen($sY)
    If $iNeg = 3 Then
    If $iLnX > $iLnY Then
    Return -1
    ElseIf $iLnX < $iLnY Then
    Return 1
    Else
    If $sX > $sY Then
    Return -1
    ElseIf $sX < $sY Then
    Return 1
    Else
    Return 0
    EndIf
    EndIf
    Else
    If $iLnX > $iLnY Then
    Return 1
    ElseIf $iLnX < $iLnY Then
    Return -1
    Else
    If $sX > $sY Then
    Return 1
    ElseIf $sX < $sY Then
    Return -1
    Else
    Return 0
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_BigNum_Compare

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_Swap(ByRef $sX, ByRef $sY)
    Local $sSwap = $sX
    $sX = $sY
    $sY = $sSwap
    Return True
    EndFunc ;==>_BigNum_Swap

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #INTERNAL_USE_ONLY#============================================================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #region Internal Functions
    Func _BigNum_Div_DivisorGreater14($sX, $sY, ByRef $sM)
    $sM="0"
    If $sY="1" Then Return $sX
    If $sX = "0" Or $sY = "0" Or $sX = "" Or $sY = "" Then Return "0"
    If $BigNum_Debug Then
    Local $BN_File=FileOpen(@ScriptDir & "\BigNum_Debug.txt",2), $BN_X=StringLen($sX)
    FileWrite($BN_File," " & $sX & " / " & $sY & " = " & @CRLF)
    FileWrite($BN_File," " & _BigNum_DS($BN_X+StringLen($sY)+3,"-") & @CRLF)
    EndIf
    Local $iLnY = StringLen($sY), $bRed = False
    Local $sRet = "", $sRem = StringLeft($sX, $iLnY), $sTmp = "", $sTm2 = "", $iCnt, $iLen = 1
    $sX = StringTrimLeft($sX, $iLnY)
    Do
    If _BigNum_DivComp($sRem, $sY) = -1 Then
    $sTmp = StringLeft($sX, 1)
    $sRem &= $sTmp
    $sX = StringTrimLeft($sX, 1)
    If StringLen($sTmp) > 0 Then $iLen += 1
    EndIf
    $sTmp = $sY
    $sTm2 = "0"
    If _BigNum_DivComp($sRem, $sY) >= 0 Then
    For $iCnt = 1 To 9
    $sTm2 = $sTmp
    $sTmp = _BigNum_DivAdd($sTmp, $sY)
    If _BigNum_DivComp($sRem, $sTmp) < 0 Then ExitLoop
    Next
    Else
    $iCnt = 0
    EndIf
    If $BigNum_Debug Then FileWrite($BN_File,_BigNum_DS($BN_X - StringLen($sX)-StringLen($sRem)+1) & $sRem & _BigNum_DS($BN_X+10-$iLen-$iLnY) & StringFormat("%0" & String($iLen) & "u", $iCnt) & @CRLF)
    If StringLen($sX) = 0 Then $bRed = True
    $sM = $sRem
    $sRem = _BigNum_DivSub($sRem, $sTm2)
    If $iCnt > 0 Then $sM = $sRem
    $sRet &= StringFormat("%0" & String($iLen) & "u", $iCnt)
    $iTrm = $iLnY - StringLen($sRem)
    $sTmp = StringLeft($sX, $iTrm)
    $sX = StringTrimLeft($sX, $iTrm)
    $iLen = StringLen($sTmp)
    $sRem &= $sTmp
    Until $bRed
    $sM = StringRegExpReplace($sM, "^0+([^0]|0$)", "\1", 1)
    If $BigNum_Debug Then
    FileWrite($BN_File," " & _BigNum_DS($BN_X+9+StringRegExp($sRet, "^0+([^0]|0$)", "\1", 1)) & _BigNum_DS(StringLen(StringRegExpReplace($sRet, "^0+([^0]|0$)", "\1", 1)),"-") & @CRLF)
    FileWrite($BN_File," " & _BigNum_DS($BN_X+9+StringRegExp($sRet, "^0+([^0]|0$)", "\1", 1)) & StringRegExpReplace($sRet, "^0+([^0]|0$)", "\1", 1))
    FileClose($BN_File)
    EndIf
    Return StringRegExpReplace($sRet, "^0+([^0]|0$)", "\1", 1)
    EndFunc ;==>_BigNum_Div_DivisorGreater14

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_Div_DivisorMaxLen14($sX, $sY, ByRef $sM)
    $sM="0"
    If $sY="1" Then Return $sX
    If $sX = "0" Or $sY = "0" Or $sX = "" Or $sY = "" Then Return "0"
    If $BigNum_Debug Then
    Local $BN_File=FileOpen(@ScriptDir & "\BigNum_Debug.txt",2), $BN_X=StringLen($sX)
    FileWrite($BN_File," " & $sX & " / " & $sY & " = " & @CRLF)
    FileWrite($BN_File," " & _BigNum_DS($BN_X+StringLen($sY)+3,"-") & @CRLF)
    EndIf
    Local $sRet = "", $iRem = StringLeft($sX, 15), $iTmp = 0, $iTrm = 6, $iLen
    $sX = StringTrimLeft($sX, 15)
    $iTmp = Floor($iRem / $sY)
    $sRet &= $iTmp
    If $BigNum_Debug Then FileWrite($BN_File," " & $iRem & _BigNum_DS(StringLen($sX)+10) & $iTmp & @CRLF)
    $iRem -= $iTmp * $sY
    While StringLen($sX) > 0
    $iTrm = 15 - StringLen($iRem)
    $iTmp = StringLeft($sX, $iTrm)
    $iLen = StringLen($iTmp)
    $iRem &= $iTmp
    $sX = StringTrimLeft($sX, $iTrm)
    $iTmp = Floor($iRem / $sY)
    $iTmp = StringRight("000000000000000" & $iTmp, $iLen)
    If $BigNum_Debug Then FileWrite($BN_File,_BigNum_DS($BN_X-StringLen($sX)+1-stringlen($iRem)) & $iRem & _BigNum_DS(StringLen($sX)+10+StringLen($sRet)) & $iTmp & @CRLF)
    $sRet &= $iTmp
    $iRem -= $iTmp * $sY
    WEnd
    $sM = String($iRem)
    If $BigNum_Debug Then
    FileWrite($BN_File," " & _BigNum_DS($BN_X+10) & _BigNum_DS(StringLen(StringRegExpReplace($sRet, "^0+([^0]|0$)", "\1", 1)),"-") & @CRLF)
    FileWrite($BN_File," " & _BigNum_DS($BN_X+10) & StringRegExpReplace($sRet, "^0+([^0]|0$)", "\1", 1))
    FileClose($BN_File)
    EndIf
    Return StringRegExpReplace($sRet, "^0+([^0]|0$)", "\1", 1)
    EndFunc ;==>_BigNum_Div_DivisorMaxLen14

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_DivComp($sX, $sY)
    $sX = StringRegExpReplace($sX, "^0+([^0]|0$)", "\1", 1)
    $sY = StringRegExpReplace($sY, "^0+([^0]|0$)", "\1", 1)
    Local $iLnX = StringLen($sX), $iLnY = StringLen($sY)
    If $iLnX < $iLnY Then
    Return -1
    ElseIf $iLnX > $iLnY Then
    Return 1
    Else
    If $sX < $sY Then
    Return -1
    ElseIf $sX > $sY Then
    Return 1
    Else
    Return 0
    EndIf
    EndIf
    EndFunc ;==>_BigNum_DivComp

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_DivAdd($sX, $sY)
    Local $iTmp = StringLen($sX), $iLen = StringLen($sY), $iCar = 0, $sRet = ""
    If $iLen < $iTmp Then $iLen = $iTmp
    For $i = 1 To $iLen Step 18
    $iTmp = Int(StringRight($sX, 18)) + Int(StringRight($sY, 18)) + $iCar
    $sX = StringTrimRight($sX, 18)
    $sY = StringTrimRight($sY, 18)
    If ($iTmp > 999999999999999999) Then
    $sRet = StringRight($iTmp, 18) & $sRet
    $iCar = 1
    Else
    $iTmp = StringRight("000000000000000000" & $iTmp, 18)
    $sRet = $iTmp & $sRet
    $iCar = 0
    EndIf
    Next
    $sRet = StringRegExpReplace($iCar & $sRet, "^0+([^0]|0$)", "\1", 1)
    Return $sRet
    EndFunc ;==>_BigNum_DivAdd

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_DivSub($sX, $sY)
    Local $iTmp = StringLen($sX), $iLen = StringLen($sY), $iCar = 0, $sRet = ""
    If $iLen < $iTmp Then $iLen = $iTmp
    For $i = 1 To $iLen Step 18
    $iTmp = Int(StringRight($sX, 18)) - Int(StringRight($sY, 18)) - $iCar
    $sX = StringTrimRight($sX, 18)
    $sY = StringTrimRight($sY, 18)
    If $iTmp < 0 Then
    $iTmp = 1000000000000000000 + $iTmp
    $iCar = 1
    Else
    $iCar = 0
    EndIf
    $sRet = StringRight("0000000000000000000" & $iTmp, 18) & $sRet
    Next
    $sRet = StringRegExpReplace($iCar & $sRet, "^0+([^0]|0$)", "\1", 1)
    Return $sRet
    EndFunc ;==>_BigNum_DivSub

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_IsValid($sX, $sY)
    If StringRegExp($sX, "[^0-9.-]") <> 0 Or StringRegExp($sY, "[^0-9.-]") <> 0 Then Return True
    Return False
    EndFunc ;==>_BigNum_IsValid

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_InsertDecimalSeparator($sX, $iDec, $iD = 18)
    If $iD = 0 And $iDec = 0 Then Return $sX
    Local $sRet = StringRegExpReplace(StringRight(StringFormat("%0" & String($iDec) & "u", "") & $sX, $iDec), "0+$", "\1", 1)
    $sX = StringTrimRight($sX, $iDec)
    If $sX = "" Then $sX = "0"
    $sRet = StringLeft($sRet, $iD)
    If $sRet = "" Or $sRet = "0" Then Return $sX
    Return $sX & "." & $sRet
    EndFunc ;==>_BigNum_InsertDecimalSeparator

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_StringIsDecimal(ByRef $sX, ByRef $sY)
    If StringLeft($sX, 1) = "." Then $sX = "0" & $sX
    If StringLeft($sY, 1) = "." Then $sY = "0" & $sY
    Local $iPsX = StringInStr($sX, ".", 0, 1) - 1, $iPsY = StringInStr($sY, ".", 0, 1) - 1
    $sX = StringRegExpReplace($sX, "\D", "")
    $sY = StringRegExpReplace($sY, "\D", "")
    Local $iLnX = StringLen($sX), $iLnY = StringLen($sY)
    If $iPsX <= 0 Then $iPsX = $iLnX
    If $iPsY <= 0 Then $iPsY = $iLnY
    If $iLnX - $iPsX > $iLnY - $iPsY Then
    For $iCnt = $iLnY - $iPsY To $iLnX - $iPsX - 1
    $sY &= "0"
    Next
    Return $iLnX - $iPsX
    ElseIf $iLnX - $iPsX < $iLnY - $iPsY Then
    For $iCnt = $iLnX - $iPsX To $iLnY - $iPsY - 1
    $sX &= "0"
    Next
    Return $iLnY - $iPsY
    EndIf
    Return $iLnX - $iPsX
    EndFunc ;==>_BigNum_StringIsDecimal

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_CheckNegative(ByRef $sX, ByRef $sY)
    Local $bNgX = False, $bNgY = False
    While StringLeft($sX, 1) = "-"
    $bNgX = Not $bNgX
    $sX = StringTrimLeft($sX, 1)
    WEnd
    While StringLeft($sY, 1) = "-"
    $bNgY = Not $bNgY
    $sY = StringTrimLeft($sY, 1)
    WEnd
    $sX = StringRegExpReplace($sX, "^0+([^0]|0$)", "\1", 1)
    $sY = StringRegExpReplace($sY, "^0+([^0]|0$)", "\1", 1)
    If $sX = "" Then $sX = "0"
    If $sY = "" Then $sY = "0"
    If $bNgX = True And $bNgY = True Then
    Return 3
    ElseIf $bNgX = True And $bNgY = False Then
    Return 1
    ElseIf $bNgX = False And $bNgY = True Then
    Return 2
    Else
    Return 0
    EndIf
    EndFunc ;==>_BigNum_CheckNegative

    [/autoit] [autoit][/autoit] [autoit]

    Func _BigNum_DS($iC, $sS=" ")
    Local $sRet="", $iCnt
    For $iCnt=1 To $iC
    $sRet&=$sS
    Next
    Return $sRet
    EndFunc
    #endregion Internal Functions

    [/autoit]
  • ich hab grad gehirnblockade :D
    meinst du ob man des auch auf mehrere faktoren auslegen könnte?

    Padmak

  • meinst du ob man des auch auf mehrere faktoren auslegen könnte?

    Es gibt da eine ganz einfache mathematische Regel...

    [Blockierte Grafik: http://upload.wikimedia.org/math/5/f/d/5fd9e08ea951cbaafa00208f20528dd8.png]

    Zitat von Padmak

    kanns sein dass bei 2^3^33 (ich hab mit nem freund gewettet dass ich es schaff es auszurechnen^^)
    633825300114114700748351602688 raukommt?

    Ja :D

    [autoit]

    MsgBox(0,"",_BigNum_Potenz(_BigNum_Potenz(2,3),33)) ; Beispiel

    [/autoit]

    Is übrigens dasselbe ...

  • ich hab grad keinen nerv für nix^^
    aber dankeschön^^
    ich schaus mir morgen an
    juhuuu 5 euro mehr :D

    Padmak

  • ähm weiß einer wie man des auf über 255 stellen ausweitet?
    bei 2^3^33 verlässt mich des script bei:

    Code
    407023661475331324026935589930861772879300884023406278027665017185616184050616404670105703196539561201076657773776888062099130428619421393089354941182783871601000920675562596653918784481876040816544336511774321649077992197623076283675541160923344664599061197639642315029362866204036023600109934409503888149148104636513284450944184256084743960281133024474580921159066903256817026957751279448639339583538226316253113828826758886579236257197907712878535441774490876632850746478955112613387046177174883073626919437111368917302041727795512515806260855347963948176604115218032742615805304921394677710139662436361575148312293557596826231433175529960502581853173014159118162270372440138544405812300474446121562148095137007503078214796659609009691111126443434219896820745948376322429007453767270205271668422930691497854463853477245658026319004135824131685550392823746542657975166614039726216445784501681369361280154623972940908181584738990754066464483221868865801192322683046826634546425630466813109387126543546145472797466962609095398311445199195389731156375592471025936825138176143192669872292444261988299481154561050939738708049989317328979305347706707169248037684933997542880789039855351687103003456679789207906971778094856154102581070045039539830559692969712564726204435667323167828531079319559588548047868881884453608217053106162577488255075721985249708120568989433379371460938926687944756457630416426956582669318250855777622637986795370359455699538259029639275560225446433737040056495774471451317650902425278313678093130560005029003260174964570577366553086612443983552851331194654407371752636023155404758724011584152676723677412753527490514387093245500572232532485190839987756420932299126718345476838472824971358180935632113553182407302559219324647745905202396464746125796990457164097010894271814238245759497245086863025930743758664143665563201838631708090800865262983704736733138977585059031100516593577103251454697868241512160857650581945118816227560352910154469980284775017916806664088589412152395566234774582945578126805056971444178136807337723991630133996784930954386947107520788608219780610247831857101176773114512316312384903153644062976426909114381265340470016110401681195370478109069491846481306620107718507225761895141009737478328500256088400423541704864853386388742065295971907569069055838811561128628377590347695279986653658131778813257746585001049668906591557695534836830995823705511627323042366598453473614293953524488509320189727278791370254930089334508932615037044473072655973241332385188343105588199937718303360390664195074673046525760104064441374580676616427011700756993222631772092580418478068150735578133763344707202448746726690246432591617743922589584240618624816120582405317992824503327061442907632750969654678083638458709899164999418938139014687840382364170757409015356447823945554214271727507072443219381653904424488994844715434585027575397995676036541936691417170005834696454537004497770634035402933378598289579280935703615367960838998490548333128354313578140152485853378195740353008932590406440789427558052934706741169069838517471323314742233809087094817257293357452063345007755803647766641476406238852090645263766722271264245624414672138326985367061010932036699300168033440211912359814535936204688768001198806068806124436080020054259665945667834276226498560092580976754570473757656382605875368338158963409664860793187029883974652201674861612218928432441550095836531456622768636520193762379950230519995949100881890518132769239821122739589371241268173917753840116960087789280439589009775891700441099760045404221058634030485894897071241680358869912489843644167216618326829426482945979907615459784788425155288678165351570459903874966354503240818792032567296028716714484381757525277761931149606501466333401538731100145048088627075795516070200815387579427508364163188743789112185300696577051171110939947617668909052916296595963059724817175318619372983759725553564219894667928251779164904186541811060457901279964975090606074457151397677798290107242305604279291814770907219494787413314456965513953173513021709477870209717015622367708153991247469977762127892677005265112738138170277805327328690587542550627600968646186164357830858727853662624425330302824302921249982779121066817428475897016616350681981458466640785063759826516091737304145052971934537035588285608772777772695812375470526943707389507323062450771228003421684058405649587798967809511649485736128462664501857920173910272654297550854803017027835355107132625558221076834314574542345879504498863532135664053889911644267949348760922029412682415670479902914169066591352213611615834276139506935557924070994084520533710698314330389830521550815580244768474434168964638120753217124795065031598270482418292453070933980885885232026235495429642748685426167188790758098446722810109867588431055931578322203573628006715512511415484525499541490228810774219362038769188302566585921017376810455789241738286751710226424004608


    sin 255 stellen
    kann man des auf über 255 ausweiten? :D

    Padmak

  • Ich weis nicht, was du für Probleme hast?

    2^3^33 = 2^(3*33) = 2^99

    Da kommt raus: 633825300114114700748351602688 und das hat genau 30 Stellen keine 255 oder sonst irgendwas...

    Bei 2^1000 sieht das z.B. schon anders aus.

    Ergebnis: 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

    Stellen:
    302, also nicht auf 255 begrenzt, wo ist das Problem?

    Zitat von Padmak

    bei 2^3^33 verlässt mich des script bei:

    Code
    407023661475331324026935589930861772879300884023406278027665017185616184050616404670105703196539561201076657773776888062099130428619421393089354941182783871601000920675562596653918784481876040816544336511774321649077992197623076283675541160923344664599061197639642315029362866204036023600109934409503888149148104636513284450944184256084743960281133024474580921159066903256817026957751279448639339583538226316253113828826758886579236257197907712878535441774490876632850746478955112613387046177174883073626919437111368917302041727795512515806260855347963948176604115218032742615805304921394677710139662436361575148312293557596826231433175529960502581853173014159118162270372440138544405812300474446121562148095137007503078214796659609009691111126443434219896820745948376322429007453767270205271668422930691497854463853477245658026319004135824131685550392823746542657975166614039726216445784501681369361280154623972940908181584738990754066464483221868865801192322683046826634546425630466813109387126543546145472797466962609095398311445199195389731156375592471025936825138176143192669872292444261988299481154561050939738708049989317328979305347706707169248037684933997542880789039855351687103003456679789207906971778094856154102581070045039539830559692969712564726204435667323167828531079319559588548047868881884453608217053106162577488255075721985249708120568989433379371460938926687944756457630416426956582669318250855777622637986795370359455699538259029639275560225446433737040056495774471451317650902425278313678093130560005029003260174964570577366553086612443983552851331194654407371752636023155404758724011584152676723677412753527490514387093245500572232532485190839987756420932299126718345476838472824971358180935632113553182407302559219324647745905202396464746125796990457164097010894271814238245759497245086863025930743758664143665563201838631708090800865262983704736733138977585059031100516593577103251454697868241512160857650581945118816227560352910154469980284775017916806664088589412152395566234774582945578126805056971444178136807337723991630133996784930954386947107520788608219780610247831857101176773114512316312384903153644062976426909114381265340470016110401681195370478109069491846481306620107718507225761895141009737478328500256088400423541704864853386388742065295971907569069055838811561128628377590347695279986653658131778813257746585001049668906591557695534836830995823705511627323042366598453473614293953524488509320189727278791370254930089334508932615037044473072655973241332385188343105588199937718303360390664195074673046525760104064441374580676616427011700756993222631772092580418478068150735578133763344707202448746726690246432591617743922589584240618624816120582405317992824503327061442907632750969654678083638458709899164999418938139014687840382364170757409015356447823945554214271727507072443219381653904424488994844715434585027575397995676036541936691417170005834696454537004497770634035402933378598289579280935703615367960838998490548333128354313578140152485853378195740353008932590406440789427558052934706741169069838517471323314742233809087094817257293357452063345007755803647766641476406238852090645263766722271264245624414672138326985367061010932036699300168033440211912359814535936204688768001198806068806124436080020054259665945667834276226498560092580976754570473757656382605875368338158963409664860793187029883974652201674861612218928432441550095836531456622768636520193762379950230519995949100881890518132769239821122739589371241268173917753840116960087789280439589009775891700441099760045404221058634030485894897071241680358869912489843644167216618326829426482945979907615459784788425155288678165351570459903874966354503240818792032567296028716714484381757525277761931149606501466333401538731100145048088627075795516070200815387579427508364163188743789112185300696577051171110939947617668909052916296595963059724817175318619372983759725553564219894667928251779164904186541811060457901279964975090606074457151397677798290107242305604279291814770907219494787413314456965513953173513021709477870209717015622367708153991247469977762127892677005265112738138170277805327328690587542550627600968646186164357830858727853662624425330302824302921249982779121066817428475897016616350681981458466640785063759826516091737304145052971934537035588285608772777772695812375470526943707389507323062450771228003421684058405649587798967809511649485736128462664501857920173910272654297550854803017027835355107132625558221076834314574542345879504498863532135664053889911644267949348760922029412682415670479902914169066591352213611615834276139506935557924070994084520533710698314330389830521550815580244768474434168964638120753217124795065031598270482418292453070933980885885232026235495429642748685426167188790758098446722810109867588431055931578322203573628006715512511415484525499541490228810774219362038769188302566585921017376810455789241738286751710226424004608


    sin 255 stellen

    Em nee, eigentlich nicht, es sind 4884 Stellen, das hätte dir aber beim anschauen schon auffallen können ...

    Einmal editiert, zuletzt von anno2008 (4. Februar 2009 um 16:13)

  • eigentlich, wenn man es streng mathematisch macht muss man
    2^(3^33) rechnen
    des is meinem pc zu viel...^^

    Padmak

  • eigentlich, wenn man es streng mathematisch macht muss man

    Em streng mathematisch? Sowas musst du auch sagen, anders ist es nämlich schlicht und einfach falsch!

    Abgesehen davon ist nirgendwo irgendwas auf 255 Stellen begrenz. Bei dir kommen 4884 Stellen raus...