да
Вероятно би било полезно да разберете как работят плувките и двойките.
Без да навлизам много в подробности...
Вземете числото 152853.5047
(периодът на въртене на луната на Юпитер Йо в секунди)
В научна нотация това число е 0.1528535047 × 10^6
Тъй като компютрите разбират само 1 и 0, има начин да се дефинира .
Мантисата (1528535047) и експонентата (6) се съхраняват в рамките на 32 бита... ако си спомням правилно, само 24 бита са за мантисата, така че плаващата запетая обикновено е по-скоро свързана с точността, отколкото с размера. Колкото по-голямо е числото, толкова по-неточно може да бъде.
1528535047 = 1011011000110111001100000000111
така че можете да съхранявате само първите 24 бита... последните три 1 са отрязани.
Тъй като целите числа са 32-битови, вие сте прав, плаваща запетая не може да го съдържа точно. по-малко значимите цифри се отрязват в края.
Всяко цяло число с абсолютна стойност по-малка от 2^24 (24 бита) може да бъде съхранено без загуба на точност. (16 777 216)
Ето как битовете се съхраняват в число с плаваща запетая:
http://phimuemue.wordpress.com/files/2009/06/576px-ieee-754-single-svg1.png
източник Един бит за знака, 8 бита за експонента и 23 бита за мантисата. Следователно, за да отговоря на въпроса ви, тъй като само 23 бита са запазени за мантисата, 32-битово цяло число не може да бъде показано с точност. Той бързо ще започне да отрязва числа (отдясно), тъй като има повече цифри, необходими за показване.
За двойно, вие просто увеличавате броя на битовете, които може да съхранява... всъщност това се нарича двойна точност, така че всяко число, което може да бъде показано като плаващо число, може да бъде показано като двойна. Допълнителните 0 просто се добавят към мантисата.
Поради тази причина, тъй като двойното заема 64 бита, повечето хора ще използват двойно, когато конвертират от 32-битово int в двойно. Плавка би била добра за преобразуване на 16-битов short.
person
Armstrongest
schedule
08.05.2010