[C++] Variablen-Problen

mobin

Stammgast
Hallo,

Ich möchte wissen, ob es möglich ist eine Zahl mit sehr vielen (Millionen) Nachkommastellen in C++ zu speichern.

Hab gelesen, dass es mt Arrays gehen soll, aber wie geht das??

Hier ist mein Code:
Code:
#include <iostream.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;

int main()
{
char an;
do
{
long double berech;
long double zaehler = 1;
long double nenner = 1;
long double zahl = 1; 

a:
cout<<"Wie viele Berechnungen sollen zur Annaeherung des Wertes PI gemacht werden?"<<endl;
cin>>berech;
system("cls");



zahl = (berech*2)-1 ;
zaehler = berech;
nenner = berech;

do
{

nenner=(zaehler*zaehler)/(nenner) +zahl;

zaehler = zaehler-1;
zahl = zahl-2;
 
}
while(zahl >0);


cout.precision(-1); 
cout<<"Nach " <<berech<<" Berechnungen entspricht PI diesem ungefeahren Wert:"<<endl<<4*(1/nenner)<<endl<<endl;

cout<<endl<<"Moechten Sie PI nocheinmal berechnen lassen (j/n)?"<<endl;
cin>>an;
system("cls");
}
while (an=='j' || an=='J');


     
      return 0;

}


Die Variable "nenner" muss diese vielen Stellen speichern können.


Übrigens, das Programm ist ein PI-"Rechner".
Nach diesem Vorgehen:
http://upload.wikimedia.org/math/7/7/8/7784cb70781f7ed59612e57fba4fb844.png
 

mobin

Stammgast
Ähhm, da hab ich noch gar kein Array drin. :D

Ich frag ja wie ich das anstellen kann.

Die Variable nenner soll sehr viele Nachkommastellen speichern können.
Wie kann ich das am besten anstellen.
Muss jetzt nicht unbedingt mit den Arrays sein.
 

mhk

Stammgast
Uh... Sorry, ich habe deine Frage nur überflogen. :o
do ... while ist sehr... grüsig! :)

Also wenn ich es richtig verstehe, weisst du nicht wie Arrays macht?

Hm, du könntest die Zahl nehmen: 1001.14713615251, dann alle Nachkommastellen nehmen (.14713615251) und dann immer ×10 -> 1.4713615251. Mit floor nimmst du dann die Vorkommazahl und schiebst sie in ein Array. Dann wieder ×10 ->4.713615251, Floor etc.

Ist jetzt nur so eine Skizze. Ich habe allerdings keine Ahnung wie man dann auch eine so grosse Zahl einfach schreiben kann, ohne gleich Operatoren zu überladen und solches Zeug. Vielleicht ist für dich C++ nicht wirklich geeignet... :o
 

mobin

Stammgast
Uh... Sorry, ich habe deine Frage nur überflogen. :o
do ... while ist sehr... grüsig! :)

Also wenn ich es richtig verstehe, weisst du nicht wie Arrays macht?

Hm, du könntest die Zahl nehmen: 1001.14713615251, dann alle Nachkommastellen nehmen (.14713615251) und dann immer ×10 -> 1.4713615251. Mit floor nimmst du dann die Vorkommazahl und schiebst sie in ein Array. Dann wieder ×10 ->4.713615251, Floor etc.

Ist jetzt nur so eine Skizze. Ich habe allerdings keine Ahnung wie man dann auch eine so grosse Zahl einfach schreiben kann, ohne gleich Operatoren zu überladen und solches Zeug. Vielleicht ist für dich C++ nicht wirklich geeignet... :o

Das Problem ist, ich muss mit die Zahl speichern können, aber trotzdem mit ihr rechnen können.
Wie kann ich mit einem array rechnen?
 

mobin

Stammgast
Ich glaub du verstehst nicht was ich möchte.

Wenn ich z.B. das mache:
45:7 = 6.4285714285714285714285714285714

Die Zahl 6.4285714285714285714285714285714 Passt ja in keine Variable, wie kann ich dann alle Ziffern der Zahl auslesen und in einen Array speichern.


Ich will dass wenn ich
45:7 rechne, dass dann das Ergebnis mit allen Nachkommastellen direkt in einen Array kommen.
Wenn die zuerst in ne Variable kommen, und von da in den Arrays, bringt das ja nichts, da gehen die stellen verloren.


Oder gibt es für C++ eine BigFloat Class?
 

Amroc

Stammgast
Hab was von einem Long Double gelesen, aber der soll nicht bei allen Compilern integriert sein

edit: hab grad gesehen, dass du den in deinem Code schon drin hast
 
Zuletzt bearbeitet:

froeschli

Stammgast
Für was für Berechnungen brauchst Du eine so lange Zahl?

Ich glaube gelesen zu haben, dass er PI berechnen möchte...

Ich glaub du verstehst nicht was ich möchte.

Wenn ich z.B. das mache:
45:7 = 6.4285714285714285714285714285714

Die Zahl 6.4285714285714285714285714285714 Passt ja in keine Variable, wie kann ich dann alle Ziffern der Zahl auslesen und in einen Array speichern.


Ich will dass wenn ich
45:7 rechne, dass dann das Ergebnis mit allen Nachkommastellen direkt in einen Array kommen.
Wenn die zuerst in ne Variable kommen, und von da in den Arrays, bringt das ja nichts, da gehen die stellen verloren.

Ein Array ist im Prinzip nichts anderes, als eine "Tabelle" (mangels besseren Wortes) von Variablen. Wenn du also deine Berechnung ausführst und direkt in ein Array (vom Type Float, Double, etc) speicherst, werden die Nachkommastellen genau gleich abgeschnitten. Ich glaube nicht, dass du dein Problem mit einem Array lösen kannst.

Warum möchtest du PI eigentlich selber berechnen? Gibt doch sicherlich eine Klasse Math.PI (sorry kenne "nur" Java) oder so etwas...

Gruss froeschli
 

mobin

Stammgast
Das mit den Arrays meinte ich so, dass jede einzelne Ziffer in einem Array gespeichert wird.

Also dass z.b. 5.34467234144574524123 so gepsichert wird:

Array 1: 5
2: 3
3: 4
4: 4
5: 6
6: 7
7: 2
.
.
.
 

froeschli

Stammgast
Das habe ich schon verstanden. Aber du kannst trotzdem nicht auf mehr Stellen zugreifen, als du in der ersten Berechnung bereits hast. Damit nützt dir weder ein Array noch sonst irgendwas...

Gruss froeschli
 
Oben