se scrivo codice in C++:C++ doppia a long long
long long d = 999999998.9999999994;
cout<<d;
ottengo uscita: 999999999
(arrotondando per eccesso)
Ma l'uscita di questo codice:
long long d = 999999998.9999994994;
cout<<d;
è 999999998
(arrotondando per difetto)
È qualcosa a che fare con la precisione. C'è un modo in cui posso cambiare la precisione. La funzione floor()
fornisce anche la stessa uscita.
Ho anche notato che se assegno il valore 8.9999994994
o 8.9999999994
a d
(variabile precedente). L'output è 8
.
È possibile aggiungere in modo esplicito 0.5 e cast doppio a lungo lungo. –
Supporto per C++ 11? I letterali definiti dall'utente potrebbero aiutare. – Yakk
@OleksandrVerhun Puoi farlo, ma se il tuo obiettivo è arrotondare il numero in virgola mobile all'intero più vicino, non dovresti farlo. http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 –