Ho convertito un algoritmo relativamente semplice che esegue un gran numero di calcoli su numeri del tipo double
da C++ a Java, tuttavia eseguendo l'algoritmo sulle due piattaforme ma la stessa macchina produce risultati leggermente diversi. L'algoritmo moltiplica e somma molti doppi e interi. Sto facendo il casting per raddoppiare nell'algoritmo di Java; l'algoritmo C non esegue il cast.Come confermare se i diversi risultati sono dovuti a differenze nella gestione in virgola mobile?
Per esempio, su una corsa ottengo i risultati:
- (Java) 64.684.970
- (C++) 65296408
(stampato a ignorare decimale)
Naturalmente , potrebbe esserci un errore nel mio algoritmo, tuttavia prima di iniziare a spendere il debugging del tempo, è possibile che la differenza possa essere spiegata da una diversa gestione in virgola mobile in C++ e Ja va? In tal caso, posso provare che questo è il problema?
Update - il luogo dove i tipi differiscono è una moltiplicazione tra due interi che viene poi aggiunto a un totale doppia corsa. aver modificato il codice C, attualmente in entrambi:
mydouble += (double)int1 * (double)int2
Quale tipo di dati è stato utilizzato nella versione Java? – wallyk
Questa è una differenza, e dubito che possa essere causato da errori di arrotondamento. La mia ipotesi è che tu abbia commesso un errore da qualche parte. A meno che tu non faccia cose estreme come la divisione per 1E300 e cose del genere. –
@wallyk: doppio. – Brabster