Mit sehr großen Zahlen rechnen? Verfasst am: 20.05.2008, 20:44
Hat jemand ne Idee wie man das machen könnte?
(Ich spreche hier von 1000- und mehrstelligen Zahlen) zB 100000! oder so^^ _________________
nicok Poster
Anmeldedatum: 15.05.2008 Beiträge: 161
Verfasst am: 20.05.2008, 21:39
100k ist doch keine große Zahl oO
Wie weit bist/warst du in der Schule? Vllt sagt dir 8*10^-31 was.
Marduk Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 374
Verfasst am: 20.05.2008, 23:24
lol 8*10^-31 ist aber klein, nicht groß
Hmm, schon mal probiert ob ULong reicht(64Bit)? Ansonsten sind eigentlich alle Datentypen an gewisse Grenzen gebunden. Ansonsten einfach mal mit Objectvariablen probieren, kA. Ansonsten kenne ich keine Möglichkeit in VB.NET, da würde die C++ wahrscheinlich mehr Freiraum lassen.
Nur nebenbei, auf Geschwinigkeitswunder darftst du bei deiner Berechnung allerdings nicht hoffen
Darf man fragen für WAS du solche Berechnungen benötigst. Da wäre es doch gleich besser auf C++ zurückzugreifen, anstatt mit Strings zu arbeiten. Habs mal getestet, mit den Standartdatentypen kann man maximal die Fakultät bis 170 (7,25...*10^306) berechnen. Da brauchst du auch nicht mit Strings anfange, da die interne Typenumwandlung die Zahlen in Double umwandelt, und der nur bis ^308 geht.
sollniss Überflieger
Anmeldedatum: 01.05.2008 Beiträge: 699
Verfasst am: 21.05.2008, 14:10
Wollte ne Benchmark Funktion basteln die e berechnet.
e = 1 + 1/1! + 1/2! + 1/3! + 1/4! usw. bis unendlich
Marduk Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 374
Verfasst am: 21.05.2008, 14:22
lol ok ^^ hab aber ne Formel gefunden, die nicht genau den Wert berechnet, aber relativ genau ist.
Hier mal der Source
Visual Basic: [code]Sub loga(ByVal n As Double) 'N! = a * 10^y 'y >0 '1 < a < 10 'log( N!) = Log(2) + log(3) + ... + log(N) = x * log(10)
Dim nfak As Integer
For i As Integer = 1 To n nfak += Math.Log(i) Next
Dim x As Double = nfak / Math.Log(10) Dim y As Integer = x Dim komma As Double = x - y Dim a As Double = Math.Exp(Math.Log(10) * komma)
Dim result As String = a & " x 10 ^ " & y MsgBox(result)
End Sub[/code]
Hab ungefähr eine Abweichung von einem Prozent. Also nicht wirklich viel.
Und wie soll ich damit weiter rechnen? _________________
Marduk Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 374
Verfasst am: 21.05.2008, 15:16
Mit VB wirst du da nicht viel rechen können, da musst du halt auf C++ gehen, der dir mehr Möglichkeiten in Bezug auf Datentypen liefert. Da ist bei VB schon relativ schnell Schluss.
Bis n=170 kannst du noch rechnen, da das noch in Double aufgenommen werden kann. Weiter wirst du mit der normalen Berechnung nichtkommen. Und das Ergebnis aus der Stirling Formel kann man auch nicht weiterverwenden, da das in keinen Datentyp mehr passt.