Zitat Zitat von itec01 Beitrag anzeigen
Hallo Zusammen,
diese Formel bricht ab:
for w@Idx = w@Start to Pi@K;
monitor;
Po@Poisson += ((Pi@Lambda ** w@Idx) *
(c@Eulner ** (Pi@Lambda * -1)) )
/ factorial(w@Idx);
on-error *all;
Po@Poisson = -1;
leave;
endmon;
endfor;

Es liegt an der Berechnung Pi@Lambda ** w@idx. Index 49 klappt noch, Index 50 geht schief.
Pi@Lambda = 35, sprich 35^50. Ist natürlich eine gigantisch große Zahl.

In der Formel geht es um den Poisson Wert kumliert, sprich Excel Formel POISSON.VERT.
Siehe auch: https://www.ibm.com/docs/de/i/7.3?topic=types-numbers

Es geht wohl max 10^63+1, aber das wäre ja schon kleiner als 35^50 und müsste somit viel früher abbrechen. Zusätzlich steht aber auch noch, dass es den Typ decimal floating point gibt, der wohl 10^6144 kann.
Wie bekomme ich das gelöst?

Danke.
Klaus
... das gesuchte Ergebnis liegt per definitionem zwischen 0 und 1. Das Problem mit der Formel ist, dass was sehr großes durch was ziemlich großes dividiert wird und mit was sehr kleinem multipliziert wird.
Wenn du das mit float Arithmetrik machst, verlierst du dabei Genauigkeit.
Sowas berechnet man rekursiv, dann tritt das numeric overflow Problem später auf. Wenn das immer noch nicht reicht, dann gibt es noch die Stirling-Formel. Frag mal Marjorie nach Poisson Verteilung - da gibt es einen Wikipedia Artkel.
Wo ich gerade dabei bin: gewöhn dir mal den Klammeraffen in den Namen ab, der macht Probleme, weil der bei verschiedenen CCSIDs nicht immer an derselben Stelle sitzt.

D*B