Kennt ihr eine Programmiersprache in der es besonders einfach ist mit einer hohen Nachkommastellen-Anzahl und besonders hohen Zahlen zu rechnen?

... komplette Frage anzeigen

8 Antworten

Ich nehme dazu https://www.gnu.org/software/bc/manual/html_node/bc_toc.html

und https://en.wikipedia.org/wiki/Bc_(programming_language)

Es wird zwar wie DOS mit Übergabeparameter gestartet, aber da macht man sich einmal eine BAT und kann die endlos langen Ergebnisse auch gleich in eine txt Datei ausgeben. 

Vorteil gegenüber anderen Sprachen:

- innerhalb der bc Datei kann man Zahlen (mit oder ohne Komma) mit über 10 Mio. Stellen eingeben

- Ausgabe in Datei einfach innerhalb der BAT mit >Dateiname

- globale Variable scale für Nachkommastellenanzahl kann pro Zeile geändert werden

- viele fertige Funktionen (sin, exp, atan, sqrt)

Pi ist einfach a(1)*4 da atan(1)=Pi/4

{jedoch langsame Konvergenzgewschwindigkeit -> gibt bessere}

- leichte Wandlung in andere Basen

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von wolfgang1956
11.09.2016, 13:47

- innerhalb der bc Datei kann man Zahlen (mit oder ohne Komma) mit über 10 Mio. Stellen eingeben

Was ich einfach mal anzweifle! Abgesehen davon: wer soll solche Zahlen eingeben oder lesen?

Der Deutsche Haushalt unseres Bufimis liegt in einer Größenordnung von 330 Mrd. €, d.h. 330000000000 € bzw. 330.000.000.000 €. Ohne die Dezimalpunkte hätte mancher schon hier Probleme, so eine Zahl zu lesen.

Ein Lichtjahr (1 Lj) sind : 9 460 730 472 580,8 km ≈ 9,5 Billionen km = 9,5 Billiarden Meter

Astronomen rechnen mit viel größeren Entfernungen! Kernphysiker rechnen in umgekehrter Richtung mit viel kleineren Dimensionen.

Einfach mal checken, ob solche Fragestellungen von praktischem „Nährwert“ sind!

0
Kommentar von precursor
12.09.2016, 16:17

@hypergerd

Recht herzlichen Dank für deine hilfreiche Antwort !

1

Java soll die Klasse BigDecimal haben, die genau dies leistet.

Mathematica kann von Hause aus mit beliebig vielen Nachkommastellen (und Vorkommastellen) rechnen. Kostet aber ein paar Kiloeuro. (Und ja, Mathematica 3 wurde 1991 verkauft, seine Programmiersprache ist aber trotzdem modern ...)

Andere Formelmanipulatoren können das ebenfalls von Hause aus.

C# kennt inzwischen die Klasse BigInteger für Ganzzahlen, und es gibt mehrere Projekte, die eine BigDecimal-Klasse nativ umsetzen (erfordert aber eine zusätzliche Datei und im Projekt einen zusätzlichen Verweis auf diese Datei)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
10.09.2016, 10:48

Vielen Dank für deine Antwort !

0

Jede Programmiersprache mit Langzahlarithmetik kann, soweit der im Rechner vorhandene Arbeitsspeicher Platz bietet, beliebig viele Stellen verarbeiten. Hier sind solche Sprachen aufgelistet: https://de.wikipedia.org/wiki/Langzahlarithmetik Hier ist eine noch umfangreichere Liste: https://en.wikipedia.org/wiki/List\_of\_arbitrary-precision\_arithmetic\_software

Wie bequem diese Langzahlarithmetik jeweils zu handhaben ist, wird, wie auch alles andere, von Sprache zu Sprache verschieden sein.

Auch jedes Computeralgebrasystem (z.B. Mathematica, wie schon erwähnt) kann mit beliebig vielen Stellen rechnen: https://de.wikipedia.org/wiki/Computeralgebrasystem

Ich benutze das Computeralgebrasystem Maxima: http://maxima.sourceforge.net/ Um bei Maxima die Zahl der Dezimalstellen einzustellen, dient die Variable fpprec. Genaueres dazu hier: http://maxima.sourceforge.net/docs/manual/de/maxima\_5.html

Hier ein Beispiel: Ich frage die Standardwert von fpprec ab, es ist 16. Die Bigfloat-Darstellung von 19/17 wird mit 16 Stellen angezeigt. Das b0 am Ende ist die Anzeige des Exponenten. Ich stelle nun die Präzision auf 300 Stellen ein und die Zeilenlänge auf 50, damit der Output hier bei gutefrage.net ins Format paßt.  Nun werden 19/17 und Pi mit je 300 Stellen ausgegeben.


(%i2) Maxima 5.38.1 http://maxima.sourceforge.net
using Lisp SBCL 1.3.4
Distributed under the GNU Public License.
See the file COPYING. Dedicated to the memory
of William Schelter. The function bug_report()
provides bug reporting information.
(%i1) fpprec;
(%o1) 16
(%i2) bfloat(19/17);
(%o2) 1.117647058823529b0
(%i3) fpprec: 300;
(%o3) 300
(%i4) linel: 50;
(%o4) 50
(%i5) bfloat(19/17);
(%o5) 1.11764705882352941176470588235294117647058\\
8235294117647058823529411764705882352941176470588\\
2352941176470588235294117647058823529411764705882\\
3529411764705882352941176470588235294117647058823\\
5294117647058823529411764705882352941176470588235\\
2941176470588235294117647058823529411764705882352\\
9411764705882b0
(%i6) bfloat(%pi);
(%o6) 3.14159265358979323846264338327950288419716\\
9399375105820974944592307816406286208998628034825\\
3421170679821480865132823066470938446095505822317\\
2535940812848111745028410270193852110555964462294\\
8954930381964428810975665933446128475648233786783\\
1652712019091456485669234603486104543266482133936\\
0726024914127b0



Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
10.09.2016, 20:01

Recht herzlichen Dank für deine Antwort !

0
Kommentar von wolfgang1956
11.09.2016, 14:11

Und, werden die Flächeninhalte und Umfänge von Ellipsen und Kreisen genauer, wenn man „π“ auf 100.000 Stellen berechnet?

Nichts gegen numerische Mathematik, nur sollte man auch wissen, was Praxisrelevanz heißt!

0

Da is mir pers. nur Java und C++ bekannt. Hatten das mal in der Schule... Java macht das mit BigDecimal aber bei C++ weiß ichs echt nicht sry.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
10.09.2016, 10:46

Vielen Dank für deine Antwort !

0
Kennt ihr eine Programmiersprache die diesbezüglich besser ist, also mehr kann, und die ohne, im Internet kaum aufzufindende, umständlich zu installierende, im Programm selber umständlich zu handhabende, Zusatzbibliotheken auskommt, die das also quasi schon von sich aus kann ?

Jetzt stelle ich einfach mal die Gegenfrage eines Dilletanten und Praktikanten: Was sollen 500 Stellen nach dem Komma praktisch bringen?

Abgesehen davon, dass die aktuellen Microprozessoren mit passender Programmierungen durchaus auch mit 1024 Bits nach dem Komma rechnen können, sofern man entsprechende Algorithmen programmieren kann, ist es irrelevant, ob man π mit 3,14; 3,141; 3,1415 … oder noch „genauer“ rechnet. Mit „normalen“ Messtechniken kann man ohne allzu großen Aufwand bis zu 0,01 mm messen. Was sollen da alle weiteren Nachkommastellen bringen?

Es mag ja sein, dass man π irgendwann auch auf zig Trillionen stellen berechnen kann. Nur sind das alles Ergebnisse, die nicht mal mehr einem Mathe-Prof den Schlaf rauben. Eingeben möchte ich weder Zahlen mit 500 noch mit mehr Nachkommastellen.

Weiters ist die Darstellung von Zahlen auch nicht unbedingt eine Angelegenheit der Programmiersprache, sondern eher eine Frage dessen, was das System rechnen lassen will. Sowohl Mac OS X (http://developer.apple.com/library/mac/navigation/) als auch iOS (http://developer.apple.com/library/ios/navigation/) bieten in der Rubrik „Mathematical Computation“ die Möglichkeit mit 1024 Bits großen Zahlen zu rechnen. Für Windows, Linux, UNIX oder Android wird es ähnliche Bibliotheken und Frameworks geben.

Für dein weiteres „Seelenheil“ wird wohl auch Doktor Google Sorge tragen … :-)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von hypergerd
11.09.2016, 16:28

zur " Gegenfrage" siehe Kommentar zu meiner Antwort.

1
Kommentar von precursor
12.09.2016, 16:14

Erst mal danke für deine Antwort !

Ich benutze als Betriebssysteme Linux und Windows 7, das hätte ich erwähnen sollen.

Was die Frage nach der Praxisnähe betrifft -->

y = sin(a) / cos(b)

Problemstellung -->

Für welche ganzzahligen (!!) Werte von a und b hat der Nachkommaanteil (!!) von y den Wert y = 0.660627914844525428156944769, wobei der Fehler nicht höher als 5*10^(-28) sein soll.

Es gibt mindestens (!!) eine exakte Lösung mit ganzen (!!) Zahlen für a und b !

Es leuchtet dir sicher sofort ein, dass man mit einer Programmiersprache, die nur mit einer Maschinengenauigkeit von 16 signifikanten Stellen rechnet, die exakte Lösung der ganzen Zahlen für a und b niemals berechnen kann.

Es ist deshalb so eine hohe Genauigkeit notwendig, weil man sonst falsche Ergebnisse für a und b erhalten kann, oder noch schlimmer gar keine.

Solltest du das Gegenteil behaupten, so würde ich einen exakten Beweis für deine Behauptung verlangen ;-))

0

Python mit Decimal und Fraction.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von precursor
10.09.2016, 10:48

Vielen Dank für deine Antwort !

0

Java, Klasse BigDecimals.

Ist allerdings etwas umständlich, anstatt a+b muss man a.add(b) schreiben oder so.



Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von PWolff
10.09.2016, 10:41

Erlaubt Java keine Überladung von Operatoren?

0
Kommentar von precursor
10.09.2016, 10:47

Vielen Dank für deine Antwort !

0