Considerate le dichiarazioniConversione da virgola mobile a doppia: la migliore affermazione in un test di unità?
float f = 7.1f;
double d = f;
Quello che possiamo affermare in una prova di unità su d?
Per esempio, questo non funziona:
Console.WriteLine(d == 7.1d); // false
Console.WriteLine(d < 7.1d + float.Epsilon); // true by luck
Console.WriteLine(d > 7.1d - float.Epsilon); // false (less luck)
Il modo migliore che ho trovato finora è quello di convertire il valore indietro:
float f2 = (float)d;
Console.WriteLine(f2 == f); // true
Quale sarebbe lo stesso come il bruto modo per dire
Console.WriteLine(d == 7.1f); // 7.1f implicitly converted to double as above
Questa domanda NON riguarda la precisione del doppio e del float in generale, ma SOLO la questione pragmatica su come un test unitario possa descrivere al meglio i confini di d. Nel mio caso, d è il risultato di una conversione che si verifica nel codice generato dalla generazione di codice leggero. Mentre collaudo questa generazione di codice, devo fare delle asserzioni sul risultato di questa funzione e questo si riduce alla semplice domanda precedente.
Quale framework di test dell'unità stai utilizzando? Potresti non necessariamente far valere una condizione che ne deriva, ad es. 'Assert.IsTrue (condition)', potresti essere in grado di utilizzare per es. 'Assert.AreEqual (value1, value2)' che può gestire l'equivalenza tra i formati numerici. – StuperUser
Non sono ancora sicuro di cosa stai provando a testare qui. Un doppio ha più precisione di un galleggiante e quindi non saranno quasi mai "uguali" tra loro. – CodeCaster
Se ometti il finale f nella costante usata per inizializzare il float, potrebbe essere anche peggio, vedi un esempio qui http://stackoverflow.com/questions/13276862/cc-notation-of-double-floating-point -values / 13279512 # 13279512 –