Powiel możliwe:
round() for float in C++C++: Jak zaokrąglić double do int?
mam podwójne (nazwijmy go X), miało być 55, ale w rzeczywistości przechowywane jako 54.999999999999943157 który właśnie realizowany.
Więc kiedy zrobić
double x = 54.999999999999943157;
int y = (int) x;
y = 54 zamiast 55!
To zdziwiło mnie przez długi czas. Jak mogę go poprawnie zaokrąglić?
Można dodać 0,5 do liczby, a następnie wykonać rzutowanie, aby umożliwić obcięcie do int. Czy musisz zaokrąglić liczby ujemne? – Blastfurnace
Możesz użyć tej definicji preprocesora: '#define ROUND_2_INT (f) ((int) (f> = 0.0? (F + 0.5): (f - 0.5)))' – c00000fd
W rzeczywistości 54,999999999999943157 to 8 ULP poniżej _exactly representable_ 55 if przez "podwójne" masz na myśli binary64 z IEEE 754. Więc to nie jest sposób, w jaki 55 jest przechowywany, jest konsekwencją tego, jak nieprecyzyjne były twoje obliczenia. – Ruslan