Come accertarsi di non avere problemi: conoscere i problemi aritmetici a virgola mobile, o assumere qualcuno che lo fa, o usare un po 'di buon senso.
Il primo problema è la precisione. In molte lingue hai "float" e "double" (double standing per "double precision"), e in molti casi "float" ti dà una precisione di 7 cifre, mentre il doppio ti dà 15. Il senso comune è che se hai un situazione in cui la precisione potrebbe essere un problema, 15 cifre è molto meglio di 7 cifre. In molte situazioni un po 'problematiche, usare "double" significa farla franca, e "float" significa che non lo fai. Diciamo che la capitalizzazione di mercato di un'azienda è di 700 miliardi di dollari. Rappresenta questo in virgola mobile e il bit più basso è $ 65536. Rappresentalo usando il doppio, e il bit più basso è di circa 0,012 centesimi. Quindi, a meno che tu non sappia davvero cosa stai facendo, usi double, non float.
Il secondo problema è più una questione di principio. Se fai due calcoli diversi che dovrebbero dare lo stesso risultato, spesso non lo fanno a causa di errori di arrotondamento. Due risultati che dovrebbero essere uguali saranno "quasi uguali". Se due risultati sono vicini, i valori reali potrebbero essere uguali. Oppure potrebbero non esserlo. È necessario tenerlo a mente e scrivere e utilizzare funzioni che dicano "x è decisamente maggiore di y" o "x è decisamente minore di y" o "xey potrebbe essere uguale".
Questo problema si aggrava molto se si utilizza l'arrotondamento, ad esempio "arrotondare x al numero intero più vicino". Se moltiplichi 120 * 0,05, il risultato dovrebbe essere 6, ma quello che ottieni è "un numero molto vicino a 6". Se poi "arrotondate il numero intero più vicino", quel "numero molto vicino a 6" potrebbe essere "leggermente inferiore a 6" e arrotondare a 5. E notate che non importa quanto precisione avete. Non importa quanto vicino a 6 il tuo risultato è, a patto che sia inferiore a 6.
E in terzo luogo, alcuni problemi sono difficili . Ciò significa che non esiste una regola facile e veloce. Se il tuo compilatore supporta "long double" con maggiore precisione puoi usare "long double" e vedere se fa la differenza. Se non fa alcuna differenza, allora o sei Ok, o hai un vero problema complicato. Se fa il tipo di differenza che ti aspetteresti (come un cambiamento al dodicesimo decimale), allora probabilmente stai bene. Se cambia davvero i risultati, allora hai un problema. Chiedere aiuto.