| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Benutzer | Leute ich glaub ich raffs nichtmehr! FEHLER-SCRIPT: http://mitarbeiter.salzburg.seminar-...rack/kakke.php 200 - 200 ist meiner Meinung nach 0, und nicht 1.70530256582E-13! Code: <pre> <?PHP // Scriptlocation: // http://mitarbeiter.salzburg.seminar-...rack/kakke.php for( $x = 4; $x > 2; $x-- ) { $a = 2.2; $b = floor(2.2); $intDoubleDetection = ($a - $b) * 1000; var_dump( $a, $b, $intDoubleDetection, floor($intDoubleDetection), (int)$intDoubleDetection, ($intDoubleDetection - (int)$intDoubleDetection) ); exit(); } ?> </pre> Vielen Dank im Voraus. Michael Rack |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer | weißt du, wie der datentyp floor funktioniert? http://de.wikipedia.org/wiki/Gleitkommazahl lies dir das durch, dann verstehst du den grund. |
| | |
| | |
| Benutzer | Ich versteh das trozdem nicht.. Gut ich verwende jetzt die bcsub funktion, jetzt funktioniert auch alles schön... Aber dann sag mir mal warum einfachste Mathematik nicht funktioniert: Code: <pre> <?PHP // Scriptlocation: // http://mitarbeiter.salzburg.seminar-...ack/kakke2.php $a = 200.01; $b = 200; $c = $a - $b; var_dump( $c ); ?> </pre> http://mitarbeiter.salzburg.seminar-...ack/kakke2.php |
| | |
| | |
| Erfahrener Benutzer | $a = 2.2; $b = floor(2.2); $intDoubleDetection = ($a - $b) * 1000; settype($intDoubleDetection, "integer"); Obiger Zusatz sollte (mit etwas Glück) die Näherungsprobleme umgehen. Besser ist natürlich eine sauberere Lösung mittels ordentlicher Funktionen (round und Konsorten) unter Verwendung der gewünschten Nachkomastellen.
__________________ www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih |
| | |
| | |
| Erfahrener Benutzer | @aberchen. Prinzipiell ist die Erklärung gut, aber in diesem Fall nicht zutreffend, da 1. PHP korrekt vorinitialisiert und b) das Problem nur bei Ganzzahligen Sachen auftreten, aber nicht bei Fliesskommazahlen. @dsmcg. Letzlich rechnet immer der Prozessor. Wie kommt aber logischerweise auf die Programmiersprache an. C beispielsweise ist sehr prozessornah, weshalb eine Rechnung hier relativ transparent ist. Aber egal, PHP arbeitet hier auch relativ transparent. Es hat "nur" eine variable Zahlendrarstellung. Das Hauptproblem ist immer, dass Fliesskommazahlen klassischerweise wie oben schon dargestellt in ein internes Format umgesetzt werden, dass nur Näherungen zulässt. Normalerweise wird dies berücksichtig, so dass eine gewisse Nachkommastellenzahl angenommen wird und dann entsprechend bei Ergebnissen gerundet wird. Problem ist, dass bei der Mulitplikation mit 1000 diese Näherung verlassen wird und damit die Rundung nicht mehr zuschlägt. Genau weiss ich es nicht, da auch die möglichen Näherungen variabel sind und ich nicht im Kopf habe, wie die Zend Engine effektiv arbeitet bzw. mit wieviel Bit die Fliesskommazahlen intern dargestellt werden. Ist auch egal. Die Rechnung mit Ganzzahlen läuft anders, da die, wie aberchen schrieb, anders dargestellt werden und daher immer genau sind, solange die vorgesehene Bit-Breite nicht überschritten wird. Bei Divisionen wird eventuell ein Float aus einem Integer und damit gelten wieder die Näherungsprobleme. bcsub arbeitet komplett anders, also mit anderen Zahlenrepräsentationen, was aber auch bedeutet, dass es die Näherungsprobleme nicht verhindert, nur soweit minimiert, dass sie bei "gängigen" Rechnungen nicht mehr auftreten. Aber Probleme haben die bc*- Funktionen ebenfalls. Zudem sind sie deutlich langsamer als die Prozessornahem Berechnungen.
__________________ www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Mathe Aufgabe | matthros | Off-Topic Diskussionen | 15 | 23.03.2006 11:28 |
| evtl. off-topic: PHP & Mathe | PHP-Fortgeschrittene | 7 | 28.06.2005 04:35 | |
| Mathe: Schleife in Formel | faux | Off-Topic Diskussionen | 2 | 28.05.2005 00:00 |
| Wie kann ich die Mathe Funktipn geteilt durch führen? | PHP Tipps 2005 | 2 | 24.04.2005 20:17 | |
| Mathe Problem Streckenberechnung mit bewegung | nilsfeld | Off-Topic Diskussionen | 24 | 10.03.2005 21:12 |
| Mathe problem | PHP Tipps 2007 | 2 | 03.01.2005 21:41 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php variabel rechnet nicht richtig sehr große zahl, 1.70530256582e-13 php, php bc runden math |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.