Self-Tcl FORUM :: Thema anzeigen - Rechnen mit großen Werten
Self-Tcl FORUM - Das deutsche Tcl Tk Forum
Self-Tcl FORUM - Das deutschsprachige Tcl-Forum_
WWW.SELF-TCL.DE / FORUM

Rechnen mit großen Werten

 
Neues Thema eröffnen   Neue Antwort erstellen    Self-Tcl FORUM Foren-Übersicht -> Tcl/Tk Grundlagen/Beginner-Forum
<< Vorheriges Thema anzeigen :: Nächstes Thema anzeigen >>  
Autor Nachricht
netlinker
Greenhorn
Greenhorn


Anmeldungsdatum: 07.03.2008
Beiträge: 9

BeitragVerfasst am: 25.02.2010, 04:22:38    Titel: Rechnen mit großen Werten Antworten mit Zitat

Hallo,

bei Berechnungen mit großen Werten habe ich das Problem, dass die Ergebnisse 'ungenau' sind.

Ich nutze die TCL Version 8.4, da BLT für die Version 8.5 nicht verfügbar ist.

Bei einigen Berechnungen ist mir jetzt aufgefallen, dass die Ergebnisse nicht meinen Erwartungen entsprachen.

Hier mal zwei Beispiele:
Code:
> set a [expr (pow(2,53) - (pow(2,53)-1))]
1.0
>
> set a [expr (pow(2,54) - (pow(2,54)-1))]
0.0                                     <== Hier hätte ich auch 1.0 erwartet
>

> expr 12345678901234566.0
12345678901234566.0
> expr 12345678901234567.0
12345678901234568.0                     <== Warum ist die letzte Ziffer eine 8??
> expr 12345678901234568.0
12345678901234568.0
>
Ich habe probiert, ob tcl_precision einen Unterschied macht, aber mit tcl_precision 1 & 17 waren die Ergebnisse gleich.

Unter TCL 8.5 ist das Verhalten mit double Werten gleich, mit Integern erhalte ich korrekte Werte, aber ohne BLT nutzt mir das nichts Traurig
Code:
set a [ expr (2**54)-(2**54-1)]
1
Habt ihr vielleicht einen Tipp wie man unter der TCL Version 8.4 dieses Problem umgehen kann?

Gruß nl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hank
Top-User
Top-User


Anmeldungsdatum: 10.03.2006
Beiträge: 876
Wohnort: Leipzig

BeitragVerfasst am: 25.02.2010, 10:49:24    Titel: Antworten mit Zitat

Hallo,

mit floats wirst du das Problem wahrscheinlich immer haben. Der Typ double hat 64bit Wortbreite und davon 52bit für die Mantisse.

Es gibt auch unter TCL 8.4 den Typ wide, der könnte evtl Abhilfe schaffen. Dieser Typ ist 64bit breit.
Code:
% expr 1<<54
0
% expr wide(1)<<54
18014398509481984 

Darüber hinaus gibt es in der tcllib das Paket math::bignum, damit ist beliebige Genauigkeit möglich.

Viele Grüße
Göran
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
netlinker
Greenhorn
Greenhorn


Anmeldungsdatum: 07.03.2008
Beiträge: 9

BeitragVerfasst am: 25.02.2010, 18:56:32    Titel: Antworten mit Zitat

Hallo Göran,

danke damit hast du mir sehr weiter geholfen.
Aus irgendeinem Grund verhält sich wide auf dem System anderes.
Auf meinem PC ergibt es das gleiche Ergebnis, wie bei deinem Beispiel
Code:

$ tclsh
% info tclversion
8.4
% expr wide(1)<<54
0
% expr wide(18014398509481984)
0
%


Aber mit dem Paket math::bignum klappt es super.

Also nochmals Danke.
Gruß nl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Self-Tcl FORUM Foren-Übersicht -> Tcl/Tk Grundlagen/Beginner-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.





TCL Tool Command Language, TK Toolkit, Lesen, Fachbücher, Referenzen, Literatur zu Programmierung





Tcl/Tk Bücher, Literatur und Fachbücher
Bücher / Fachbücher / Literatur zu Tcl/Tk



zu Favoriten / als Lesezeichen


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de




| www.Self-Tcl.de | Fragen & Antworten zu Tcl/Tk | Forum Anmeldung | Mitglieder-Login | FORUM | Impressum |



- TOP -
(zurück nach oben auf dieser Seite)