Visualizzazione risultati 1 fino 6 di 6

Discussione: [PHP] Il problema dei float, virgola mobile e precisione

  1. #1
    montebue non è connesso Utente giovane
    Data registrazione
    19-01-2010
    Messaggi
    36

    Predefinito [PHP] Il problema dei float, virgola mobile e precisione

    Salve a tutti,

    premetto che sono un "noob" ma ho saputo riconoscere almeno il problema.

    Devo far fare dei calcoli ad una pagina php con dei numeri reali. Quindi devo usare dei float e mi si pone il problema della precisione che a volte è decisamente molto scarsa....

    Per esempio, devo fare questo calcolo:

    (-0.32811*(2000^2)+2357.9*2000+8913600)

    Se me lo faccio a mano con la calcolatrice di casa ottengo 12316960 ed infatti lo stesso risultato si ottiene con la calcolatrice di google.

    Ora il problema è che invece PHP mi restituisce un risultato ben diverso 13628743.12378

    Codice PHP:
    <?
    $lung
    =2000;
    echo (-
    0.32811*($lung^2)+2357.9*$lung+8913600) . "<br>";
    echo (-
    0.32811*(2000^2)+2357.9*2000+8913600);
    ?>
    Output:

    13628743.12378
    13628743.12378
    Siccome si tratta di calcoli di euro, la differenza non è poca come posso far fronte all'errore decisamente "costoso" (un milione e trecentomila euro!!!) ? Grazie!

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Provato con le funzioni a precisione arbitraria? BC Math Functions

  3. #3
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    hai sbagliato con la potenza

    Prova
    echo (-0.32811*(pow(2000,2))+2357.9*2000+8913600);
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  4. #4
    montebue non è connesso Utente giovane
    Data registrazione
    19-01-2010
    Messaggi
    36

    Predefinito

    Grazie Dreadnaut per la risposta!

    Ho guardato qil link e subito mi è preso un balordone quindi in pratica dovrei sostituire tutti gli operatori matematici con delle funzioni apposta?

    Caspita...ho già implementato una trentina di formule lunghe un palmo di schermo....

    Ma quel che non capisco è: google che tipo di dati usa per fare il calcolo?
    E la mia calcolatrice???
    Ricordo 5 anni fa che feci un programma uguale in VB6 e non avevo avuto questo problema...

    perchè con PHP si presenta? non c'è altro modo?
    Grazie!

    Edit ho visto adesso l'altro post! Ora controllo!

  5. #5
    montebue non è connesso Utente giovane
    Data registrazione
    19-01-2010
    Messaggi
    36

    Predefinito

    Citazione Originalmente inviato da binarysun Visualizza messaggio
    hai sbagliato con la potenza

    Prova
    echo (-0.32811*(pow(2000,2))+2357.9*2000+8913600);
    binarysun
    GRAZIE INFINITE!!!!!!!

  6. #6
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    infatti se facevi
    Codice PHP:
    echo (2000^2);
    avresti capito che il simbolo ^ funziona solo con VB per PHP devi fare
    Codice PHP:
    pow(2000,2)
    per i valori float credo che siano precisi a meno che tu sia un fisico nucleare!!!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •