Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    Linguaggi - Programmazione - Calcolo numerico

    Sto appurando che a fronte di come è disposta l'operazione e il tipo di linguaggio utilizzato, si possono ottenere risultati differenti.
    Questo accade quando ci sono numeri molto piccoli (tipo 10 cifre decimali) e come il programma rappresenta un numero in doppia precisione.

    Online non ho trovato nulla di attendibile e sto cercando di convertire una vecchia funzione FORTRAN in js, ma alla fine ottengo risultati differenti e vorrei capire perchè e dove il pc sbaglia.

    Sapete aiutarmi?
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    Javascript gestisce i decimali in modo tutto suo (non è il solo, in effetti), il problema è quello...

    Dai un'occhiata qua (non è tecnico ma spiega come funziona il calcolo decimale) http://floating-point-gui.de/basic/

  3. #3
    Ma ottieni errori macroscopici o sulle ultime cifre decimali? Giusto per capire se è un problema dovuto all'uso del floating point o se c'è qualche altro genere di pasticcio (conversioni a tipi sbagliati, regole diverse del linguaggio sugli operatori, ...).
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    allora già in fortran la rappresentazione di un decimale in precisione doppia è così :

    0.581 equivale a 0.581D0 viene rappresentato come 0.58099999999999996.
    con D0 lo dichiaro esplicitamente.
    Se invece non lo dichiaro ma viene automaticamente trasformato dal fortran con la dichiarazione :
    IMPLICIT DOUBLE PRECISION (A-H,O-Z)
    ottengo un altro valore ancora più scorretto (si parla dalla 6° cifra in poi).

    Il programma convertito integra una centinaia di righe di formule, e il risultato viene sballato piano piano ad ogni operazione.
    Ottenendo infine un errore dalla 4° cifra decimale in poi.

    Premetto che il software ha tante sottrazioni divisioni moltiplicazioni somme sequenziali (mi pare di aver letto che anche possa generare problemi).
    Le parentesi sono messe tutte al posto giusto.

    Tutte le variabili in fortran sono dichiarate con doppia precisione.

    in js (il tipo non deve essere dichiarato e da quanto ne so al momento di assegnazione al tipo di dato js una già la precisione doppia)
    sono tutti numerici e le 4 variabili acquisite da form sono state tutte passate sotto la funzione parseFloat()
    Che mestiere difficile.....essere da soli ancora di più

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Quote Originariamente inviata da lnessuno Visualizza il messaggio
    Javascript gestisce i decimali in modo tutto suo (non è il solo, in effetti), il problema è quello...

    Dai un'occhiata qua (non è tecnico ma spiega come funziona il calcolo decimale) http://floating-point-gui.de/basic/
    Tutto quello che sapevo sui computer è caduto come un castello di carta...
    Ora posso finalmente dire "STUPIDI COMPUTER non sanno fare neanche una somma"
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Non ti aspettavi mica che si potessero rappresentare infiniti numeri con un numero finito di bit, no?

  7. #7
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    no ci mancherebbe.
    Però mi chiedo perchp un'operazione o una rappresentazione di un numero in un linguaggio differisce da un'altro?
    Che mestiere difficile.....essere da soli ancora di più

  8. #8
    Utente di HTML.it L'avatar di hfish
    Registrato dal
    Dec 2000
    Messaggi
    3,180
    perche' ogni linguaggio gestisce i tipi e le operazioni come preferisce

    il tipo double e' implementato in un modo in C, in un modo in java, in un altro in PHP.
    se la rappresentazione del tipo fosse sempre la stessa, e cosi' fosse anche l'implementazione delle funzioni che ci lavorano sopra, avremmo 3 volte lo stesso linguaggio
    Non dobbiamo trascurare la probabilità che il costante inculcare la credenza in Dio nelle menti dei bambini possa produrre un effetto così forte e duraturo sui loro cervelli non ancora completamente sviluppati, da diventare per loro tanto difficile sbarazzarsene, quanto per una scimmia disfarsi della sua istintiva paura o ripugnanza del serpente.

  9. #9
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    bha non sono d'accordo (ignorantemente parlando).
    due operazioni non possono restituire due risultati diversi.
    Magari una può restituire più decimali piuttosto che un'altra.

    Ma non restituire lo stesso numero di decimali con risultati diversi... questo sempre a cifre poco significative.
    Ma in un contesto di calcolo più ampio genera errori.
    Che mestiere difficile.....essere da soli ancora di più

  10. #10
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    e poi un numero a doppia precisione ha sempre 32 decimali di mantissa.
    e tt i software devono restituire le 32 cifre in modo uguale.

    poi una ci può mettere 1ms per fare operazione e l'altra 5... ma il risultato deve essere lo stesso.

    Poi sicuramente ho torto... perchè ancora non ho capito il perchè di questo comportamente.

    Però la logica mi suggerisce questo.
    Che mestiere difficile.....essere da soli ancora di più

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.