problem mit kommastellenberechnung
flaimo 13.04.2002 - 06:10 584 5
flaimo
ILFTKYS
|
hier die angabe die ich bekommen habe: Erstellen Sie ein PHP-Skript, das die Zahl e (2,71828 ... ) aus der Reihe 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! entwickelt. Die Reihe soll dann abgebrochen werden, wenn der Betrag der Differenz zweier aufeineanderfolgender Näherungen kleiner epsilon ist (z.B. epsilon <= 0.00001). Die Eingabe des epsilon erfolgt durch ein Formular (ein Textfeld, ein Submit-Button). Das PHP Skript soll ein sogenanntes “Affenformular” sein, d.h. ein Formular das sich selbst aufruft. so weit so gut. hab's ausprogrammiert, allerdings wenn ich jetzt eine zahl mit sehr viel nullkommastellen eingebe und dadurch die reihe sehr hoch raufgeht, packt das php anscheinend nicht mehr. kann das sein? sobald es mehr als 1 + ... + 1/17! rechnen sollte kommt immer das gleiche für e raus bzw es gibt nicht mehr als 40 nachkommastellen....
|
manalishi
tl;dr
|
das ist sehr gut möglich, das kommt drauf an, welcher datentyp von php intern verwendet. normalerweise hat man nicht so aufwändige arithmetische aufgaben mit php zu bewältigen ich schätz mal es handelt sich und ein float oder double float hat eine größe von 4 bytes, mindestgenauigkeit 6 nachkommastellen double hat eine größe von 8 bytes, mindestgenauigkeit 10 nachkommastellen long double hat eine größe von 10 bytes, mindestgenauigkeit von 10 nachkommastellen so schaut's in c aus, und php ist sehr c-ähnlich, drum denke ich dass es da keinen großen unterschied geben kann..
|
that
ModeratorHoffnungsloser Optimist
|
float hat eine größe von 4 bytes, mindestgenauigkeit 6 nachkommastellen
double hat eine größe von 8 bytes, mindestgenauigkeit 10 nachkommastellen
long double hat eine größe von 10 bytes, mindestgenauigkeit von 10 nachkommastellen das hängt natürlich von der Plattform ab, bei den üblichen Win32 Compilern gibts z.B. kein "long double", bzw ist das genauso lang wie "double"...
|
manalishi
tl;dr
|
oh sorry. ist natürlich von der implementierung abhängig!
|
flaimo
ILFTKYS
|
der fehler tritt sowohl unter WAMP als auch unter LAMP auf
|
Ringding
Pilot
|
Kann auch nicht anders sein, weil die Genauigkeit nun mal beschränkt ist. Wenn du mehr brauchst, musst du eine geeignete Library verwenden, z.B. GMP
|