Ergebnis 1 bis 9 von 9

Thema: [PHP] Mathematische Genauigkeit?

  1. #1
    Member
    Registriert seit
    Jul 2001
    Beiträge
    368
    Renommee
    10

    Question Mathematische Genauigkeit?

    Hallo!

    Weiss jemand, wie es PHP mit der Genauigkeit mathematischer Berechnungen hält und wie man diese verändern kann?

    Ich hab nämlich eine Berechnung aus JavaScript geportet wo eine Zahl praktisch bis auf die letzte Nachkommastelle berechnet (und Debugweise ausgegeben) wird; die gleiche Berechnung in PHP jedoch schneidet ab einer Stelle ab und rundet auf.

    Ich benötige jedoch die Zahl unabgeschnitten bis auf die letzte Stelle, da das eine sehr präzise Berechnung ist und dadurch das Ergebnis "verfälscht" wird, denn die PHP-Funktion spuckt dann am Ende was anderes aus als die JS.

    Code:
    jd = 2437867
    f  = 20.5
    
    PHP:
    $t = (($jd - 2415020) + ($f / 24) - 0.5) / 36525;
    
    JS:
    t  = ((jd - 2415020) + (f / 24) - 0.5) / 36525;
    Code:
    Ergebnis:
    
    PHP: 0.625526465891
    JS:  0.6255264658909423
    Trifft das Ganze auch auf Funktionen wie sin (), cos () und so zu?

    Weiss jemand Rat?

    Grüße,
    Mario
    myPPP - Wird bald :P
    www.open-ware.de

  2. #2
    Registered User
    Registriert seit
    Dec 2000
    Beiträge
    2.319
    Renommee
    1120
    php sollte double für floating point numbers verwenden... sollte
    http://de3.php.net/manual/de/ref.math.php

    printf verwenden und Genauigkeit angeben. Ungewollte Integerdivision scheint jedenfalls nicht im Spiel zu sein

    beliebige Genauigkeit für floats gibts mit
    http://de3.php.net/manual/de/ref.bc.php

  3. #3
    Member
    Registriert seit
    Jul 2001
    Beiträge
    368
    Renommee
    10
    Hm, stimmt, mit printf ("%.16f", ...); gibt er mirs genau aus. Trotzdem versteh ich nicht, wieso
    Code:
    $ra = (((6.6460656 + 2400.0513 * $t + 2.58e-5 * $t * $t + $f) * 15 - $ln) % 360) * $d2r;
    In PHP was anderes ausspuckt als
    Code:
    ra = (((6.6460656 + 2400.0513 * t + 2.58e-5 * t * t + f) * 15 - ln) % 360) * d2r;
    in JavaScript bei gleichen Übergabewerten:
    Code:
    t   = 0.6255264658909423
    f   = 20.5
    ln  = -6.983333333333333
    d2r = 0.017453292519943295 
    
    PHP:
    4.4156830075456535
    
    JS:
    4.42304792511156
    Das ist doch 1:1 die gleiche Formel ... *grübel* ...

    Nachtrag:

    Wenn ich die PHP-Formel mit dem Windows-Rechner nachrechne bekomme ich 4.4263024139067503961142888644398 raus ... wo steckt denn da der Wurm?!?

    OffTopic:
    (sorry für neuen Post, Edit-Zeitspanne war schon vorbei)


    OffTopic:
    Oh, ging ja doch
    myPPP - Wird bald :P
    www.open-ware.de

  4. #4
    Registered User
    Registriert seit
    Dec 2000
    Beiträge
    2.319
    Renommee
    1120
    Rundungsfehler, Anzeigefehler, ...
    willkommen in der Welt der Rechnerarithmetik

  5. #5
    Registered User
    Registriert seit
    Jan 2001
    Beiträge
    4.852
    Renommee
    1000
    Was berechnest du da eigentlich?
    www.gimpusers.de - GIMP-Tutorials und -Infos

  6. #6
    Member
    Registriert seit
    Jul 2001
    Beiträge
    368
    Renommee
    10
    Im gesamten ist es die Berechnung für den Aszendenten (das Sternzeichen, was zum Zeitpunkt deiner Geburt am östlichen Horizont aufsteigt) nach dem System der vedischen (aus den alt-indischen Sanskrit-Schriften) Astrologie, aus Geburtszeit und Ort (in Form von Zeitzone, Berücksichtigung von Sommerzeit und geographischen Längen- und Breitengraden (Longitude und Latitude)).

    Auf www.jyotishtools.com gibts Freebies vom Author einer bekannten vedischen Astro-Software, die in JavaScript diese Berechnung durchführen. Für www.astroved.de hab ich diese Formeln nach PHP geportet und sie tun auch gut ihren Dienst, jedoch hab ich festgestellt, dass es hin und wieder Abweichungen gibt und wir bekommen auch ab und zu mal Post von der Seite, die das bestätigen. Bei näherem Prüfen ist mir das dann ins Auge gefallen.

    Im Endeffekt spuckt das PHP-Script einen um ein paar Grad verschobenen Aszendenten aus, als das JavaScript auf www.jyotishtools.com. Das berechnet nämlich den korrekten, der auch mit der Software bis auf die Gradminute übereinstimmt.

    ...

    Grüße, Mario
    myPPP - Wird bald :P
    www.open-ware.de

  7. #7
    Registered User
    Registriert seit
    Jan 2001
    Beiträge
    4.852
    Renommee
    1000
    OffTopic:

    OMG
    www.gimpusers.de - GIMP-Tutorials und -Infos

  8. #8
    Member
    Registriert seit
    Jul 2001
    Beiträge
    368
    Renommee
    10
    OffTopic:

    hehe *g*
    myPPP - Wird bald :P
    www.open-ware.de

  9. #9
    Member
    Registriert seit
    Jul 2001
    Beiträge
    368
    Renommee
    10
    Hab das Problem gefunden und beseitigt. Lag an den Modulus-Operationen (%), die liefern nämlich nur Integerzahlen zurück, auch wenn der Übergabewert ein Float ist. Jedoch alle % mit fmod (float x, float y) ersetzt liefert das korrekte Ergebnis und es stimmt nun mit dem JavaScript und der Software überein.

    Grüße,
    Mario
    myPPP - Wird bald :P
    www.open-ware.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Rechnungen in beliebiger genauigkeit?
    Von Enchanter im Forum Algorithmen und sonstige Programmiersprachen
    Antworten: 5
    Letzter Beitrag: 25.06.2003, 11:32
  2. Mathematische Ausdruecke in Shell
    Von IcePic im Forum UNIX/Linux
    Antworten: 5
    Letzter Beitrag: 29.08.2002, 20:07
  3. Logarithmus (Andere Basen, Höhere Genauigkeit)
    Von dennis im Forum Algorithmen und sonstige Programmiersprachen
    Antworten: 6
    Letzter Beitrag: 25.07.2002, 17:59
  4. Mathematische Begriffe
    Von Amageddon im Forum Naturwissenschaften & Elektronik
    Antworten: 1
    Letzter Beitrag: 16.05.2002, 21:02
  5. 3D - Mathematische Grundkenntnisse
    Von walkingdeath im Forum Algorithmen und sonstige Programmiersprachen
    Antworten: 13
    Letzter Beitrag: 01.08.2001, 19:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •