Как можно представить 2 как точное число? 4? 15? 0,5? Ответ только в том, что некоторые числа могут быть представлены точно в формате с плавающей запятой (который основан на base-2 / binary), а другие не могут.
Это ничем не отличается от десятичного. Вы не можете представить 1 / 3 точно в десятичном формате, но это не значит, что вы не можете представить 0.
Ноль особенным образом, потому что (как и другие действительные числа) доказать это свойство более тривиально, чем для произвольного дробного числа. Но это все.
Итак:
что это за значения (0, 1/16, 1/2048, ...), что позволяет им быть точно представленными .
Простая математика. В любой конкретной базе, в том виде представления, о котором мы говорим, некоторые числа могут быть записаны с фиксированным числом десятичных знаков; другие не могут. Вот и все.
Вы можете играть в онлайн с H. IEEE-754 Шмидта конвертер с плавающей точкой для разных чисел, чтобы увидеть кучу разных представлений, и какие ошибки возникают в результате кодирования в эти представления. Для начала попробуйте 0,5, 0,2 и 0,1.
Я (возможно, наивно) понимал, что все значения с плавающей запятой содержат некоторую нестабильность.
Нет, абсолютно нет.
Вы хотите рассматривать каждое значение с плавающей запятой в вашей программе как потенциально имеющее небольшую ошибку, потому что вы обычно не знаю какая последовательность расчетов привела к этому. Вы не можете доверять этому, в общем . Я ожидаю, что кто-то наполовину научил вас этому в прошлом, и именно это привело к вашему недоразумению.
Но, если вы действительно знаете ошибку (или ее отсутствие), связанную с каждым шагом в создании значения (например, «все, что я сделал, инициализировал его к нулю»), тогда это нормально! Не нужно об этом беспокоиться.