Matematicamente, 0 0 ricorrente può essere mostrato uguale a 1. Questa domanda tuttavia non riguarda l'infinito, la convergenza o la matematica dietro a questo.Perché non 0.9 ricorrente sempre uguale 1
L'ipotesi sopra può essere rappresentata utilizzando i doppi in C# con il seguente.
var oneOverNine = 1d/9d;
var resultTimesNine = oneOverNine * 9d;
Utilizzando il codice sopra riportato, (resultTimesNine == 1d)
è true.
Quando si utilizzano invece i decimali, la valutazione risulta falsa, tuttavia, la mia domanda non riguarda la disparità di precisione del doppio e del decimale.
Poiché nessun tipo ha una precisione infinita, come e perché raddoppiare mantiene tale uguaglianza laddove il decimale no? Cosa sta succedendo letteralmente "tra le righe" del codice sopra, per quanto riguarda il modo in cui la variabile oneOverNine
è memorizzata?
Suppongo che l'arrotondamento avvenga. Per i doppi verso '1.0', per i galleggianti lontano da esso. – millimoose
Quale versione di C#, compilatore e sistema operativo? Chiedere perché l'uso di VS2010 su una macchina Win7 a 64 bit restituisce "true" per me sia per i float che per i double, sia che si tratti di x86 o x64. –
@JoelRondeau Domanda giusta, sulla mia macchina attuale (VS2010, Win7 x64), ottengo gli stessi risultati come te, ma false per decimale, quindi ancora, differenze di precisione, ma interessanti per il confronto. –