Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Dec --> Bin

Автор: EDG 31.12.2006 0:21

Здравствуйте, подобная тему уже обсуждалась год назад, но у меня другой вопрос. В FAQ'е есть программа перевода из одной с\с в другую, но та программа к сожалению переводит из десятичной в двоичную с\с только интервал чисел 1..1023. Я написал свою которая может переводить из десятичной в двоичную с\с интервал чисел 1..2047.... а дальше идёт чушь wacko.gif :
при переводе 2047 получается 11111111111, а при переводе 2048 --> 100000000010
2049 --> 100000000010
2050 --> 100000000020
2051 --> 100000000020

Program proga;
var x,st: longint;
b: real;
begin
read(x);
st:=0;
b:=0;
Repeat
b:=b+((x mod 2)*exp(st*ln(10)));
st:=st+1;
x:=x div 2;
Until x=0;

writeln(b:2:0);
end.


Помогите пожалуйста разобраться, в чём проблема?

Автор: Malice 31.12.2006 0:29

Поменяй тип переменной b c real на extended, там мантисса побольше.

Автор: EDG 31.12.2006 0:58

Цитата(Malice @ 30.12.2006 20:29) *

Поменяй тип переменной b c real на extended, там мантисса побольше.

Пробовал уже, пишется ошибка "Must be in 8087 mode to compile this." Что это? Пишет после b:=0, когда убираю эту строку, таже ошибка пишется после следующей =(

Автор: Bokul 31.12.2006 1:03

http://forum.pascal.net.ru/index.php?s=&showtopic=3895&view=findpost&p=34459

Автор: Malice 31.12.2006 1:10


http://forum.pascal.net.ru/index.php?s=&showtopic=5854&view=findpost&p=44425

Автор: EDG 31.12.2006 1:35

Молодец Malice! good.gif Спасибо большое! Интервал чисел увеличился как минимум в 2 раза smile.gif Мне этого хватит))

Автор: Bokul 31.12.2006 1:39

Вот, что находилось по моей ссылке:

Цитата

Эмуляция сопроцессора
Очень часто у многих возникает вопрос - почему при компиляции у меня возникает ошибка Error 116: Must be in 8087 mode to compile this.
Ответ: Вы используете один из следующих вещественных типов:
Single, Double, Extended, Comp
Для работы с этими типами, необходима эмуляция сопроцессора. Просто добавьте в начало программы директивы:
{$E+, $N+}


Автор: EDG 31.12.2006 1:51

И тебе спасибо, я видел, только не помогло =( Я написал {$E+, $N+} а оно распозналось просто как коментарий и всё =(

--------------------------

Ой, извиняюсь, всё даже намного лучше, просто нада было написать {$E+,N+}, а не {$E+,$N+}
Спасиб тебе))

Автор: Bokul 31.12.2006 1:57

Надо так:


{$E+} {$N+}


Автор: EDG 31.12.2006 2:03

Цитата(Bokul @ 30.12.2006 21:57) *

Надо так:

{$E+} {$N+}




ОК good.gif yes2.gif
Теперь интервал составляет 1..262144 o_O Дальше просто некуда :D И мне не надо)) Вот так если нужно больше, тут уже нужно в массив запись нулей и единиц вести.

Автор: UksusoFF 2.06.2007 2:29

Народ, а как можно записывать в двоичной системе действительное счисления число, имеющее не более 50 цифр в десятичной записи? Используя Динамические массивы. чего то я не нашел... помогите пожалуста новичку blink.gif