2016-08-31 1 views
3

Я узнал, что 0,1 не может быть точно представлен как число с плавающей запятой. Аргумент в учебнике заключался в том, что 0.1 не может быть записан как своего рода двоичная научная нотация, хотя я никогда не был уверен в том, как люди доказывают этот аргумент. В связи с этим, мой вопрос сейчасМожет ли 42 быть точно представленным как плавающая точка?

Может ли 42 быть точно представлен как плавающая точка?

Скажем, мы обсуждаем формат IEEE-754 binary64.

+0

Если я правильно помню, проблема с десятичной частью состоит в том, что ее можно аппроксимировать только комбинацией 1/2, 1/4, 1/8, 1/16, 1/32, ..., 1/(2^n), который не может получить ровно 0,1. Но для целых чисел проблем не должно быть. – jonhopkins

ответ

3

Ну, целое значение, достаточно мал, чтобы поместиться с плавающей мантиссы Поинт (42 в вашем случае) может быть представлена ​​именно

42 (decimal) == 101010 (binary) 

на contary, 1/10не может быть представлена ​​именно:

0.1 (decimal) == 0.0001100110011001100... (binary) 

так 0.1 десятичное является двоичным периодической дроби

+0

@zell: '42' достаточно мал (менее 52 бит) для соответствия' double' mantissa: https://en.wikipedia.org/wiki/Double-precision_floating-point_format. Вы * можете * представлять '0,1' как' 1 * 10^-1' и точно представлять как '1', так и' -1' - это идея типа «decimal' –

+0

Очень ясно. Большое спасибо! – zell

Смежные вопросы