IPB
ЛогинПароль:

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> операции над сист счисления
сообщение
Сообщение #21


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


ого!, здо'рово! попытаюсь разобраться, вот хотел ещё узнать при конвертации если количество знаков в дробной части увеличивается часть из них может перейти в целую часть числа? зависит ли положение запятой от того в большую сс переводишь число или в меньшую? я кстати сделал уголок, но вот запятая всё косячит norespect.gif
не знаю пока, если пойму возьмусь за твою идею)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(AlexSt @ 21.12.2007 12:32) *

хотел ещё узнать при конвертации если количество знаков в дробной части увеличивается часть из них может перейти в целую часть числа?

Дробная часть меньше единицы, целая - больше. Они живут отдельно, независимо. Нет, знаки не могут "переходить".

Я тут на досуге накорябал все четыре действия над вещественными числами smile.gif. Любая длина (до 32К), любое основание (до 32К), со знаками. Теперь сделать конвертацию займет не более 15 минут.. Если хочешь - могу показать.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Lapp @ 23.12.2007 3:16) *

Дробная часть меньше единицы, целая - больше. Они живут отдельно, независимо. Нет, знаки не могут "переходить".

Я тут на досуге накорябал все четыре действия над вещественными числами smile.gif. Любая длина (до 32К), любое основание (до 32К), со знаками. Теперь сделать конвертацию займет не более 15 минут.. Если хочешь - могу показать.

1. Что знечит "любое основание"? Или числа хранятся в виде текста?
2. 15 минут на конвертацию числа - это сильно даже для IBM PC с ее 4.77. МГц. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(andriano @ 23.12.2007 12:13) *
1. Что знечит "любое основание"? Или числа хранятся в виде текста?
andriano, если вступаешь в разговор не в его начале - будь добр, потрудись прочесть предыдущие мессаджи..

Цитата(andriano @ 23.12.2007 12:13) *
2. 15 минут на конвертацию числа - это сильно даже для IBM PC с ее 4.77. МГц. smile.gif
Неудачная шутка - я делал такие вещи еще на Apple-2 (2 МГц, 8 бит) весьма успешно и достаточно быстро smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


lapp, если не трудно, выложи good.gif
я вот конвертацию уже рабочую слепил, умножение, деление через конвертацию, осталось подумать над сложжением и вычитанием толковым, но выкладывай всё - интересно!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Выкладываю.
Предупреждаю:
1. решение не оптимизировано;
2. могут быть ошибки;
3. все действия должны выполняться над числами в одной СС (автоматического контроля за этим нету).
const
L=6;

type
tNum= record
m: array[1..L]of integer;
e,b: integer;
n: boolean;
end;

const
{младшие разряды слева, точка сдвинута на величину e от правого края}
a: tNum= (m:(0,2,1,1,0,0); e:3; b:10; n:false); {это 1.12}
b: tNum= (m:(0,6,5,0,0,0); e:1; b:10; n:true); {это -0.0056}
nill: tNum= (m:(0,0,0,0,0,0); e:0; b:10; n:false); {это 0}

var
c: tNum;

{ Number output }
procedure WrNum(a:tNum);
var
i,k:integer;
begin
with a do begin
if n then Write('-.') else Write(' .');
for i:=L downto 1 do begin
if m[i]<10 then k:=48 else k:=55;
Write(Chr(m[i]+k))
end;
Write('_e',e,'_b',b)
end
end;

procedure Norm(var a:tNum; s:integer);
var
i,j,k:integer;
begin
k:=0;
with a do begin
while (k<L)and(m[L-k]=0) do Inc(k);
if k=L then e:=0
else begin
Dec(k,s);
if k>0 then for i:=L-s downto 1 do begin
j:=i-k;
if j>0 then m[i]:=m[j] else m[i]:=0
end
else if k<0 then for i:=1 to L do begin
j:=i-k;
if j<=L then m[i]:=m[j] else m[i]:=0
end;
Dec(e,k)
end
end
end;

{ Addition, no sign }
procedure Ad(a,b:tNum; var c:tNum);
var
i,d:integer;
begin
Norm(a,1);
Norm(b,1);
if a.m[L-1]=0 then c:=b
else if b.m[L-1]=0 then c:=a
else begin
if a.e>b.e then Norm(b,a.e-b.e+1) else Norm(a,b.e-a.e+1);
d:=0;
for i:=1 to L-1 do begin
d:=a.m[i]+b.m[i]+d;
c.m[i]:=d mod a.b;
d:=d div a.b
end;
c.e:=a.e;
c.b:=a.b
end
end;

{ Substruction, no sign }
procedure Sb(a,b:tNum; var c:tNum);
var
i,d: integer;
f: boolean;
begin
Norm(a,0);
Norm(b,0);
if a.m[L]=0 then begin
c:=b;
c.n:=not b.n
end
else if b.m[L]=0 then begin
c:=a;
c.n:=not a.n
end
else begin
if a.e>b.e then Norm(b,a.e-b.e) else Norm(a,b.e-a.e);
d:=0;
i:=L;
while (i>1)and(a.m[i]=b.m[i]) do Dec(i);
f:=a.m[i]<b.m[i];
for i:=1 to L do begin
if f then d:=b.m[i]-a.m[i]+d+a.b else d:=a.m[i]-b.m[i]+d+a.b;
c.m[i]:=d mod a.b;
d:=d div a.b-1
end;
c.e:=a.e;
c.b:=a.b;
c.n:=f
end
end;

{ Multiplication }
procedure Mul(a,b:tNum; var c:tNum);
var
i,j,s,x: integer;
d: tNum;
f: boolean;
begin
Norm(a,1);
Norm(b,0);
c.n:=a.n xor b.n;
f:=false;
s:=0;
d.b:=a.b;
for j:=1 to L do begin
x:=0;
for i:=1 to L-1 do begin
x:=b.m[j]*a.m[i]+x;
d.m[i]:=x mod a.b;
x:=x div a.b
end;
d.m[L]:=x;
d.e:=s;
Inc(s);
if f then Ad(c,d,c) else begin
c:=d;
f:=true
end
end;
if x>0 then Norm(c,0) else Norm(c,1);
c.e:=a.e+b.e-1
end;

{ Division }
procedure Dv(a,b:tNum; var c:tNum);
var
i,j,k,expa,expb:integer;
d,d0: tNum;
begin
Norm(a,0);
Norm(b,0);
expa:=a.e;
expb:=b.e;
c.n:=a.n xor b.n;
a.e:=0;
b.e:=0;
a.n:=false;
b.n:=false;
for j:=L downto 1 do begin
k:=0;
repeat
Sb(a,b,d);
if d.n then break;
a:=d;
Inc(k);
until false;
c.m[j]:=k;
Dec(b.e)
end;
c.e:=expa-expb+1;
c.b:=a.b
end;

{ Addition, with sign }
procedure Add(a,b:tNum; var c:tNum);
begin
if a.n then if b.n then begin
Ad(a,b,c);
c.n:=true
end
else Sb(b,a,c)
else if b.n then Sb(a,b,c)
else Ad(a,b,c)
end;

{ Substruction, with sign }
procedure Sub(a,b:tNum; var c:tNum);
begin
if a.n then if b.n then Sb(b,a,c)
else begin
Ad(a,b,c);
c.n:=true
end
else if b.n then Ad(a,b,c)
else Sb(a,b,c)
end;

begin
Dv(a,b,c);
WrNum(a); WriteLn;
WrNum(b); WriteLn;
WrNum©; WriteLn;
ReadLn
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 22.12.2024 15:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name