Ankündigung

Einklappen
Keine Ankündigung bisher.

Ausgabe von xxx stelliger Zahl

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ausgabe von xxx stelliger Zahl

    Hi,
    zuersteinmal der Quellcode:

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);

    $zahl_pi = (float) 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;

    var_dump($zahl_pi);

    ?>
    Kann mir jemand sagen, wieso die Zahl bei der Ausgabe von der Variable bei '3.14159265359' abgeschnitten wird? Muss ich evtl. einen anderen Datentyp verwenden?

    Gruß

  • #2
    Hast du die im Kopf ausgerechnet?
    mögliche Gründe
    Die Größe einer Fließkomma-Zahl ist plattformabhängig, dennoch stellt ein Maximum von ~1.8e308 mit einer Genauigkeit von 14 Nachkomma-Stellen einen üblichen Wert dar (das entspricht 64-Bit im IEEE-Format).
    Es ist ziemlich normal, dass einfache Dezimalzahlen wie 0.1 oder 0.7 nicht in ihre internen binären Entsprechungen konvertiert werden können, ohne einen kleinen Teil ihrer Genauigkeit zu verlieren. Das kann zu verwirrenden Ergebnissen führen. So wird floor((0.1 + 0.7) * 10) normalerweise 7 statt des erwarteten Wertes 8 zurück geben (als Ergebnis der internen Entsprechung von 7.9999999999...).

    Das gründet sich auf die Tatsache, dass es unmöglich ist, manche Dezimal-Zahlen durch eine endliche Anzahl an Nachkomma-Stellen darzustellen. Dem Wert 1/3 entspricht z.B. der interne Wert von 0.3333333. . ..

    Kommentar


    • #3
      Hm, die ist doch aber nicht unendlich ^^
      Und was macht es für einen Unterschied ob man die Zahl so:

      31415926535897932384626433832795028841971693993751 05820974944592307816406286208998628034825342117067 9

      oder so:

      3.141592653589793238462643383279502884197169399375 10582097494459230781640628620899862803482534211706 79

      darstellt? 'Oo

      Kommentar


      • #4
        Auch INTEGER Werte erreichen irgendwann eine Grenze (Overflow)
        speicher das ganze als String und benutz eine der PEAR-Math Pakete um damit zu rechnen falls nötig.

        Kommentar


        • #5
          Andernfalls könnte man auch die Konstante M_PI verwenden die bei PHP automatisch definiert ist.

          Kommentar


          • #6
            ...und zum Rechenen dann ggf. bcmath[1].

            [1] http://php.net/manual/en/ref.bc.php

            Basti

            Kommentar


            • #7
              Zitat von <Daniel>
              Und was macht es für einen Unterschied ob man die Zahl so:

              31415926535897932384626433832795028841971693993751 05820974944592307816406286208998628034825342117067 9

              oder so:

              3.141592653589793238462643383279502884197169399375 10582097494459230781640628620899862803482534211706 79

              darstellt? 'Oo
              Wo soll denn der Unterschied sein?
              Beide können nicht dargestellt werden.

              Oder willst Du sagen, dass PHP mit der ersten Zahl etwas anfangen kann?

              Bei 64 Bit Integers würde ich mal grob schätzen, dass die Zahl nur ein Drittel der Länge haben dürfte als da steht.
              Bei 32 Integers nochmal nur die Hälfte.


              Wenn Du selbst Funktionen für groooooooße Zahlen schreiben willst, kannst Du ja mal bei Donald E. Knuth vorbeischauen. In seiner "Art of Computer Programming" gibt's auch ein paar Kapitel über Rechnen mit großen Zahlen.

              Kommentar

              Lädt...
              X