vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Rechnen mit sehr großen Zahlen 
Autor: Aicher1998
Datum: 29.05.14 10:22

Hallo
ich hab da mal ein kleines Provlem.
Ich müsste mit sehr langen Zahlen rechnen (über 100.000 Stellen).
Hab mir deshalb einiges zusammengesucht und um vb.net umgeschrieben.
Allerdings werden keine Komma-Stellen unterstützt.
Mein Code bisher ist folgender:

 
Module MATHs
    Public Function LTrim0(ByVal strVar As String) As String
        Do Until Len(strVar) = 1 Or Left$(strVar, 1) <> "0"
            strVar = Mid$(strVar, 2)
        Loop
        LTrim0 = strVar
    End Function
 
    Public Function Add(ByVal strNo1 As String, ByVal strNo2 As String) As _
      String
        Dim bytSum As Byte
        Dim bytCarry As Byte
        Dim lngMax As Long
        Dim lngVar As Long
        Dim strSum As String = ""
 
        strNo1 = LTrim0(strNo1)
        strNo2 = LTrim0(strNo2)
        lngMax = IIf(Len(strNo1) > Len(strNo2), Len(strNo1), Len(strNo2))
        strNo1 = Right$(New String("0", lngMax) & strNo1, lngMax)
        strNo2 = Right$(New String("0", lngMax) & strNo2, lngMax)
        For lngVar = Len(strNo1) To 1 Step -1
            bytSum = Val(Mid$(strNo1, lngVar, 1)) + Val(Mid$(strNo2, lngVar, _
              1)) + bytCarry
            strSum = bytSum Mod 10 & strSum
            bytCarry = bytSum \ 10
        Next lngVar
        If bytCarry Then strSum = bytCarry & strSum
 
        Return strSum
    End Function
 
    Public Function Divide(ByVal strNo1 As String, ByVal strNo2 As String) As _
      String
        Dim bytQuo As Byte
        Dim lngVar As Long
        Dim strQuo As String = ""
        Dim strDiv As String = ""
        Dim strVar As String = ""
 
        strNo1 = LTrim0(strNo1)
        strNo2 = LTrim0(strNo2)
        lngVar = Len(strNo2)
        strDiv = Left$(strNo1, lngVar)
        Do While lngVar <= Len(strNo1)
            strVar = Subtract(strDiv, strNo2)
            bytQuo = 0
            Do While Left$(strVar, 1) <> "-"
                bytQuo = bytQuo + 1
                strVar = Subtract(strVar, strNo2)
            Loop
            strQuo = strQuo & CStr(bytQuo)
            lngVar = lngVar + 1
            strDiv = Subtract(strNo2, Mid$(strVar, 2)) & Mid$(strNo1, lngVar, 1)
        Loop
 
        Return LTrim0(strQuo)
    End Function
 
    Public Function Modulo(ByVal strNo1 As String, ByVal strNo2 As String) As _
      String
        Return Subtract(strNo1, Multiply(strNo2, Divide(strNo1, strNo2)))
    End Function
 
    Public Function Multiply(ByVal strNo1 As String, ByVal strNo2 As String) As _
      String
        Dim bytPrd As Byte, bytCarry As Byte
        Dim lngVar1 As Long, lngVar2 As Long
        Dim strPrd As String, strVar As String
 
        strNo1 = LTrim0(strNo1)
        strNo2 = LTrim0(strNo2)
 
        If Len(strNo1) > Len(strNo2) Then
            strVar = strNo1
            strNo1 = strNo2
            strNo2 = strVar
        End If
 
        strPrd = "0"
 
        For lngVar1 = Len(strNo1) To 1 Step -1
            strVar = New String("0", Len(strNo1) - lngVar1)
            bytCarry = 0
            For lngVar2 = Len(strNo2) To 1 Step -1
                bytPrd = Mid$(strNo1, lngVar1, 1) * Mid$(strNo2, lngVar2, 1) + _
                  bytCarry
                strVar = bytPrd Mod 10 & strVar
                bytCarry = bytPrd \ 10
            Next lngVar2
            If bytCarry Then strVar = bytCarry & strVar
            strPrd = Add(strPrd, strVar)
        Next lngVar1
 
        Return strPrd
    End Function
 
    Public Function Subtract(ByVal strNo1 As String, ByVal strNo2 As String) As _
      String
        Dim bytDif As Byte
        Dim bytCarry As Byte
        Dim lngVar As Long
        Dim strDif As String = ""
        Dim strVar As String = ""
 
        strNo1 = LTrim0(strNo1)
        strNo2 = LTrim0(strNo2)
        If Len(strNo1) < Len(strNo2) Or (Len(strNo1) = Len(strNo2) And strNo1 < _
          strNo2) Then
            strVar = strNo1
            strNo1 = strNo2
            strNo2 = strVar
        End If
        strNo2 = Right$(New String("0", Len(strNo1)) & strNo2, Len(strNo1))
        For lngVar = Len(strNo1) To 1 Step -1
            bytDif = Val(Mid$(strNo1, lngVar, 1)) - Val(Mid$(strNo2, lngVar, _
              1)) - bytCarry + 10
            strDif = bytDif Mod 10 & strDif
            bytCarry = 1 - bytDif \ 10
        Next lngVar
        strDif = LTrim0(strDif)
        If strVar > "" Then strDif = "-" & strDif
        Return strDif
    End Function
End Module
Kann mir bitte jemand helfen?
Ich versteh das nämlich nicht so ganz.

Gruß Aicher
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Rechnen mit sehr großen Zahlen3.711Aicher199829.05.14 10:22
Re: Rechnen mit sehr großen Zahlen2.224ModeratorDaveS29.05.14 11:38
Re: Rechnen mit sehr großen Zahlen2.003Aicher199829.05.14 14:08
Re: Rechnen mit sehr großen Zahlen2.055ModeratorDaveS29.05.14 14:43

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel