Можно ли преобразовать число с плавающей запятой по основанию 10 в эквивалентное по основанию 2 число?

Если задано число с плавающей запятой по основанию 10, например 0,583*10^3, можно ли преобразовать это число в эквивалентную форму по основанию 2 x*2^y путем отдельного преобразования дроби (0,583) и показателя степени (3) в базу 2? Если да, то как я могу продемонстрировать это? Большое спасибо за Вашу помощь!


person A_Pointar    schedule 16.09.2014    source источник
comment
Числа с плавающей запятой IEEE754 являются двоичными (т. е. основанием 2) числами с плавающей запятой. Но преобразование не так просто, поскольку вы должны преобразовать одно основание в другое, поэтому вы не можете просто преобразовать дробь и показатель степени по отдельности. Если вы измените основание показателя степени, значение дроби должно измениться соответственно. Также обратите внимание, что вы не всегда будете получать конверсию один к одному.   -  person Rudy Velthuis    schedule 16.09.2014
comment
Библиотеки с плавающей запятой в большинстве языков уже делают это. Это нетривиальная задача, если вам нужен правильный округленный результат   -  person phuclv    schedule 08.04.2015
comment
comment
stackoverflow.com/questions/2302969/   -  person phuclv    schedule 08.04.2015


Ответы (1)


Не все числа с плавающей запятой по основанию 10 можно точно преобразовать в число с плавающей запятой по основанию 2. Например, 0.2 может быть точно представлено в формате с плавающей запятой по основанию 10, но не может быть представлено в формате с плавающей запятой по основанию 2 с конечным числом цифр 0.001100110011001100110011001100110011001100110011001101..., которое округляется примерно до 0.200000000000000011102230246251565404236316680908203125.

Связанная статья: Почему десятичные числа не могут быть представлены точно в двоичный.

Если вас просто интересует приближение, существуют различные библиотеки, которые могут сделать это за вас. Например, atof("3.14") в C преобразует строку цифр в собственное представление с плавающей запятой вашей машины, из которого вы сможете извлечь двоичные цифры.

person ceilingcat    schedule 07.08.2016