Fehler bei der Division durch sehr kleine Zahlen?

Hallo liebe Forenexperten,

für finanzmathematische Berechnungen nutze ich eine Formel, bei der
gelegentlich durch sehr kleine Zahlen geteilt wird (dank unserer
niedrigen Zinsen werden die immer kleiner).

Nun scheint Ragtime einen Fehler zu haben, der dazu führt, daß schon
bei zehn oder elf (keine Ahnung, warum nicht immer nach derselben
Anzahl) Nullen nach dem Komma "Division durch Null" als Fehlermeldung
ausgegeben wird, obwohl die Zahl definitiv größer als Null ist, nur
eben schon relativ klein (wobei das ja auch völlig egal ist, wie klein
sie ist). Ich behelfe mir im Moment, indem ich die Zahlen abfange, den
ganzen Bruch mit hinreichend großen Zahlen multipliziere und
anschließend das Ergebnis wieder entsprechend kürze. Aber das ist mehr
als eine schlechte Krücke.

Es sollte doch kein Problem sein, durch 10 -E26 (also 0,fünfundzwanzig
Nullen dann 1 ) oder ähnliche Zahlen zu teilen!

Vielleicht weiß jemand eine bessere, hilfreichere Lösung als meine
derzeitige mistige Krücke?

Lieben Gruß

Gottwalt

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9015 On 5 November, 2009 22:29 Jacques Villars said,

Hallo Gottwalt,
ich kann den Fehler nur teilweise reproduzieren ; ich kann problemlos
durch 10E-300 teilen ; aber durch 10E-308 klappt es nicht mehr ! aber
mit Excel aber auch nicht ! die Grenze scheint, also mit dem Rechner
etwas zu tun zu haben, oder ?
jacques
Le 4 nov. 2009 à 13:21, Gottwalt a écrit :

>
> Nun scheint Ragtime einen Fehler zu haben, der dazu führt, daß schon
> bei zehn oder elf (keine Ahnung, warum nicht immer nach derselben
> Anzahl) Nullen nach dem Komma "Division durch Null" als
> Fehlermeldung ausgegeben wird

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9017 On 5 November, 2009 18:46 Gottwalt said,
Hallo Liste, hallo Jacques,

die Formel, die mir am meisten Fehler produziert, ist folgende (eigentlich triviale) Formel:
                            n
         1               q    -1
V = ------------ x ---------
         n         
       q                 q - 1


Dabei kann der Ausdruck im Nenner des zweiten Bruchs "q-1" bei kleinem Zinssatz gegen 0 gehen, ohne 0 zu erreichen.

Wann dann die Fehlermeldung kommt, ist nicht ganz klar, vielleicht hängt es auch von den übrigen Zahlen ab, denn mal kommt sie schon bei größeren q, mal erst bei kleineren.
Ganz grundsätzlich, wenn ich das als Mathematiker betrachte, dürfte der Fehler gar nicht auftreten, solange q noch größer 0 ist. Wieviel größer dürfte dem Computer doch egal sein, und insgesamt kommen bei der Formel und den eingesetzten Werten Zahlen zwischen 1 und 100 heraus, diese müssen aber präzise stimmen.

Um es nochmal sehr deutlich zu formulieren: Es handelt sich ja hier um eine völlig banale, kleine Formel, und daß dabei durch sehr kleine Zahlen geteilt wird, dürfte doch eigentlich nicht zu Fehlern führen?

Vielleicht wäre das beim Support sinnvoll aufgehoben? Aber gerne hätte ich davor noch eine exaktere Eingrenzung. Kann das mal vielleicht jemand auf Windows verifizieren? Das wäre auch interessant, gerade unter dem Gesichtspunkt von Jacques, daß es vielleicht vom Rechner (Betriebssystem? Hardware?) abhängen könnte ...

Deshalb hier die Formel, um sie in RagTime zu kopieren:

(1/(C3^B4))*(((C3^B4)-1)/(C3-1))

Dabei steht in "B4" ein Wert größer 1 (z. B. 1,0000000000057) und in  C3 ein Wert zwischen 1 und 99.

Herzlichen Dank und Gruß

Gottwalt

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9018 On 7 November, 2009 00:04 Peter Krajacic said,

On 05.11.2009, at 18:46, Gottwalt wrote:

> ... wenn ich das als Mathematiker betrachte, dürfte der Fehler gar
> nicht auftreten, solange q noch größer 0 ist.

Doch wohl nur, solange q grösser als 1 ist!

> (1/(C3^B4))*(((C3^B4)-1)/(C3-1))
>
> Dabei steht in "B4" ein Wert größer 1 (z. B. 1,0000000000057) und
> in C3 ein Wert zwischen 1 und 99.

Demnach kann aber q = 1 sein, dann ist also der zweite Nenner (q-1)
gleich Null, was zu Div0 führt.

Grüße, Peter Krajacic

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9019 On 6 November, 2009 08:30 Gottwalt said,

Am 07.11.2009 um 00:18 schrieb Peter Krajacic:

>
> On 05.11.2009, at 18:46, Gottwalt wrote:
>
>> ... wenn ich das als Mathematiker betrachte, dürfte der Fehler gar
>> nicht auftreten, solange q noch größer 0 ist.
>
> Doch wohl nur, solange q grösser als 1 ist!

Du hast recht, ich muß das vielleicht aufdröseln: Durch vorhergehende
Berechnungen erhalte ich ein q1, das sehr klein, aber größer 0 ist.
Dem addiere ich dann eine 1 hinzu und schreibe es in das Feld B3. Das
Ganze ist ja ein etwas größeres Formular. Und somit ist "q1" zwar
immer größer 0, "q" dadurch zwangsläufig größer 1.

>
>> (1/(C3^B4))*(((C3^B4)-1)/(C3-1))
>>
>> Dabei steht in "B4" ein Wert größer 1 (z. B. 1,0000000000057) und
>> in C3 ein Wert zwischen 1 und 99.
>
> Demnach kann aber q = 1 sein, dann ist also der zweite Nenner (q-1)
> gleich Null, was zu Div0 führt.

Nein, q bleibt immer größer 1, denn das oben genannte q1 ist immer
größer 0. Und dem Ragtime dürfte es doch völlig egal sein, wieviel
größer das ist?

Lieben Dank und Gruß

Gottwalt

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9020 On 7 November, 2009 12:29 Jacques Villars said,
Hallo Gottwalt,

wenn ich in B4 1,000 000 000 000 5 eingebe, bekomme ich 1,000 000 000 000 5, OK, wenn ich aber 1,000 000 000 000 05 eingebe, bekomme ich 1,000 000 000 000 1 ! und mit der Eingabe 1,000 000 000 000 005 kommt ein 1 stattdessen  ; Excel auch ist damit limitiert ! und Mac OS X auch, weiss aber nicht wieviel ; mein guter und alter HP16 RPN-Taschenrechner war noch stärker limitiert ; also mit 1 in B4 ist die Formel nicht mehr gültig

Im RT pdf-Referenz (menu hilfe) Seite 379 liest man : 
Zahlen
Zahlen werden mit mindestens 13 Dezimalstellen berechnet und gesichert. Der arithmetische Bereich umfaßt -1,1E4932 bis 1,1E 4932. Zahlen außerhalb dieses Bereichs werden als Text interpretiert.

Herzliche Grüsse,
jacques

Le 5 nov. 2009 à 18:46, Gottwalt a écrit :



(1/(C3^B4))*(((C3^B4)-1)/(C3-1))


Re: Fehler bei der Division durch sehr kleine Zahlen?

#9021 On 7 November, 2009 12:34 Gottwalt said,

Hallo Jacques,

Taschenrechner waren diesbezüglich immer limitiert, das versteht sich
von selbst.

Ich ging beim Computer allerdings davon aus, daß dies nicht schon bei
noch nennbaren Teilern geschieht (also hier sind wir ja erst bei den
Billionsteln, auf deutsch, französisch kann ich so große Zahlen nicht).

Und es ist irgendwie nicht logisch, denn manchmal kommt die
Fehlermeldung DIV0! schon bei Teilern, die an der zwölften oder
dreizehnten Stelle keine 0 mehr haben, manchmal auch später.

Insofern einfach unlogisch ... werde mich wohl weiter mit der
Erweiterung des ganzen Vorganges behelfen müssen.

Lieben Gruß

Gottwalt

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9022 On 7 November, 2009 13:54 Jacques Villars said,

Hallo Gottwalt,
mit excel kann man mit höchstens 14 Stellen nach dem Komma rechnen,
mit RT nur mit 13 Stellen :
probiere :
in A1 : 1,000 000 …1
in A2 : 1
in A3 : A1-A2
in B3 : 1/A3
weiss nicht warum, muss aber feststellen …und akzeptieren ;-)
@+
jacques

Le 7 nov. 2009 à 12:52, Gottwalt a écrit :

>
>
> Taschenrechner waren diesbezüglich immer limitiert, das versteht
> sich von selbst.

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9023 On 7 November, 2009 15:49 Gottwalt said,

Hallo Jacques,

danke für Deine Antwort!

Dann komme ich um ein Abfangen der Zahl und die Erweiterung des
Bruches nicht herum.

Jetzt wüßte ich allerdings gerne, ob auch sonst entsprechend gekürzt
oder wenigstens intern mit den richtigen Zahlen gerechnet wird (z. B.
bei "endlosen" Dezimalzahlen wie 1/3 oder e etc.).

Herzlichen Gruß

Gottwalt

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9024 On 7 November, 2009 16:19 Jacques Villars said,

Hallo Gottwalt,

es wird intern gekürzt :

in A1 : 1
in A2 : 3
in A3 : A1/A3
in B3 : 0,333 333 333 333 33
in C3 : A3-B3 ergibt 0
in D3 : C3*10^20 ergibt 0

oder :

E1 : Pi
E2 : 3,141 592 653 589 8
E3 : E1-E2
E4 : 1/E3 ergibt DIV/0!

herzlich jacques

Le 7 nov. 2009 à 16:03, Gottwalt a écrit :

>
>
> Jetzt wüßte ich allerdings gerne, ob auch sonst entsprechend gekürzt
> oder wenigstens intern mit den richtigen Zahlen gerechnet wird (z.
> B. bei "endlosen" Dezimalzahlen wie 1/3 oder e etc.).

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9025 On 7 November, 2009 16:54 Gottwalt said,

Am 07.11.2009 um 16:34 schrieb Jacques Villars:

> Hallo Gottwalt,
>
> es wird intern gekürzt :

Danke Jacques für Deine Untersuchungen!

Herzlichen Gruß

Gottwalt

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9026 On 7 November, 2009 17:34 Jürgen Schell said,

Die genaue RagTime-Implementation kenne ich auch nicht, aber hier ein
bisschen allgemeines:

Fließkommazahlen werden auf Rechnern in der Form
Signifikant * 2^Exponent
repräsentiert.

Signifikant und Exponent haben eine feste Anzahl von Dualstellen.
Ihr habt also einmal eine Anzahl von Stellen, die die Präzision oder
Stellengenauigkeit der Berechnungen festlegt und zweitens (mit dem
Exponenten) eine Angabe, wo das Komma steht.

Der gängigste Typ für Fließkommazahlen auf Rechnern ist "double". Ein
double hat 64 bit. Davon sind typischerweise 11 bit der Exponent und die
Stellengenauigkeit beträgt 53 bit inklusive Vorzeichen. Damit bleiben 52
"echte Stellen" für die Zahl.

2^52 hat dezimal 15 Stellen.

("Dezimalstellen ≈ Dualstellen / 10 * 3" ist eine gute Daumenregel für
die Genauigkeit.)

Im Dezimalsystem kennt Ihr das Problem: (10 / 3) * 3 gibt nicht 10, wenn
Ihr mit endlich vielen Stellen rechnet. Die normalen Algorithmen aus der
Grundschule führen auf 9,9999999999999999...

Den Effekt gibt es dual auch, nur bei anderen Zahlen.
Ganzzahl((0,1+0,7)*10)
würde normalerweise bei endlicher Stellenzahl auf Rechnern 7 und nicht
(rechnerisch korrekt) 8 ergeben. Im Dezimalsystem ist das verblüffend,
aber der Effekt entspricht dem dezimalen 1/3 + 1/3 + 1/3. (0,1 und 0,7
führen auf periodische Dualbrüche, sind also in der Technik "Signifikant
* 2^Exponent" nie genau darstellbar.)

(Wer es auf dem Mac testen will: Gebt mal im Terminal die Zeile
php -r "print (int) ((0.1+0.7)*10);"
ein und tippt Return. Die Scriptsprache PHP liefert 7 zurück.)

Ganzzahl((0,1+0,7)*10) liefert in RagTime aber 8, in OpenOffice auch,
Excel hab ich nicht probiert. Die Entwickler der Tabellenkalkulationen
benutzen eine Reihe von Tricks, um die drastischsten Probleme beim
Rechnen mit periodischen Dualbrüchen in einer endlich genauen Welt zu
minimieren. Dazu gehört auch, dass Rundungen benutzt werden. Deshalb
liegt die Stellengenauigkeit bei diesen Programmen typischerweise bei
weniger als 15 Dezimalstellen.

Gruß, Jürgen

Jacques Villars schrieb:
> Hallo Gottwalt,
>
> es wird intern gekürzt :
>
> in A1 : 1
> in A2 : 3
> in A3 : A1/A3
> in B3 : 0,333 333 333 333 33
> in C3 : A3-B3 ergibt 0
> in D3 : C3*10^20 ergibt 0
>
> oder :
>
> E1 : Pi
> E2 : 3,141 592 653 589 8
> E3 : E1-E2
> E4 : 1/E3 ergibt DIV/0!
>
> herzlich jacques
>
> Le 7 nov. 2009 à 16:03, Gottwalt a écrit :
>
>>
>>
>> Jetzt wüßte ich allerdings gerne, ob auch sonst entsprechend gekürzt
>> oder wenigstens intern mit den richtigen Zahlen gerechnet wird (z. B.
>> bei "endlosen" Dezimalzahlen wie 1/3 oder e etc.).
>
>
>

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9027 On 7 November, 2009 18:04 Gottwalt said,

Hallo Jürgen,

herzlichen Dank für Deine Ausführungen!

Ich gebe zu, daß mir das einfach nicht (mehr) gewärtig war bzw. ich
davon ausging, daß dies heutzutage nicht mehr gelte.

Insofern: Ich komme wohl nicht um geeignete Erweiterungen drumrum, um
den Fehler zu vermeiden.

Gruß

Gottwalt

Re: Fehler bei der Division durch sehr kleine Zahlen?

#9028 On 8 November, 2009 17:24 Jacques Villars said,

Hallo Jürgen,
und wann erscheint *dein* Buch über RagTime ?
;-)
herzliche Grüsse
jacques

Le 7 nov. 2009 à 17:48, Jürgen Schell a écrit :

> hier ein bisschen allgemeines: