Wpis z mikrobloga

@Swiezutki: przecież rzutowanie zadziałało prawidłowo, float jest wyższym typem jak int. Na dodatek aby to zrozumieć musisz wiedzieć czym jest int i jaka jest jego struktura w pamięci to samo float, wtedy zrozumiesz o co chodzi z zaokrąglaniem.
@Swiezutki: takie to właśnie jest to "świeże" pokolenie, nie da się tego wytłumaczyć jedną odpowiedzią, aby zrozumieć int, float, double czyli podstawowe typy trzeba zrozumieć np. floating point, podstawy systemu dwójkowego. Po co zabierać się za programowanie w c++ nie znając podstawy podstaw? Drugie primo ultimo to pierwsza lepsza ksiażka pokroju [durnej] symfonii czy tam pasji c++ tłumaczy to zagadnienie.
@Swiezutki: wydaje mi sie, ze rzutowanie stylem c jest nieprzewidywalne i dlatego nie powinno byc uzywane(chodzi o tego floata, ze do 2 zaokroglil), dlatego powinno uzywac sie np. static_cast, ale to tylko takie moje przemyslenia - moge sie mylic
@tomek-taktowski: Człowieku xD. Pokazujesz TAKI stereotyp znawcy programisty, że aż nie mogę patrzeć na to co piszesz. I jeszcze ten pseudomądry bełkot - "świeże pokolenie", "drugie primo ultimio", nazywanie pozycji Grębosza durną, sugerowanie, że nie znam binarnego, chyba masz ogromne kompleksy albo przejawy megalomani. Ogarnij.
EDIT: No dobra, ogarnąłem IBM - serious person( ͡º ͜ʖ͡º). Wszystko tłumaczy
@aklopis: Okej, dzięki za sugestie ;)
@Swiezutki: http://ideone.com/9RjJAK

Liczba w formie 1.999999999 jest typu double, a nie float. Precyzja float jest mniejsza i nie może zapisać liczby 1.999999999 dokładnie, więc zaokrągla do najbliższej wartości możliwej w jej reprezentacji, czyli 2. Jak widzisz na przykładzie, zmiana float na double daje oczekiwane zachowanie, bo większa precyzja double pozwala na zapisanie tej liczby.

Co do drugiego przykładu: reprezentacja liczb zmiennoprzecinkowych i całkowitych jest zupełnie inna. Funkcja printf nie