gudn tach!
Da kommt dann in zweierlei Hinsicht Müll raus:
Erstens kann (int)round(100*exp($irgendwas)) niemals eine negative zahl ergeben (dachte ich zumindest).
Zweitens kommt die Spam-Wahrscheinlichkeit 0 in den Spams angeblich in 99% aller Fälle vor.
exp(x) waechst *trommelwirbel* exponentiell. ;-)
durch die konvertierung in int, werden zahlen, die groesser als 2^31-1 sind, nicht mehr so verwaltet, wie man's gerne als normaler mensch haette.
siehe http://php.net/int.
in deinem fall genuegt es schon, wenn $irgendwas groesser als ln((2^31-1)/100) ist, also z.b. 17. ab dann kommt nie wieder das richtige ergebnis heraus, sondern irgendeine zahl im int-bereich.
loesungsansaetze:
- vermeide grosse zahlen (z.b. einfach durch weglassen von exp, ist eh bloss eine skalierung),
- vermeide int oder
- binde ein bignum-paket ein (laaaangsaaaam)
wenn du exp weglaesst, macht das ja nix, dann rechnest du eben mit ln(V) und achte darauf, dass der ln nicht auf V angewendet wird, wenn V=0 ist.
das wuerde bedeuten:
ln(V) ist aus dem intervall (-\infty,\infty), also ganz R.
bei ln(V)>0 ist die wahrscheinlichkeit groesser, dass es spam ist.
bei ln(V)<0 ist die wahrscheinlichkeit groesser, dass es ham ist.
ln(V)=0 macht einen nicht schlauer.
eine ganz andere moeglichkeit waere, nicht den quotienten, sondern die differenz zu bilden, dann drueckt man sich zumindest vor grossen zahlen, da V somit nur im intervall [-1,1] liegen kann. ob das praktikabl ist, weiss ich allerdings aus dem stegreif nicht.
prost
seth