![]() |
![]() ![]() |
![]() |
AlexSt |
![]()
Сообщение
#21
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
ого!, здо'рово! попытаюсь разобраться, вот хотел ещё узнать при конвертации если количество знаков в дробной части увеличивается часть из них может перейти в целую часть числа? зависит ли положение запятой от того в большую сс переводишь число или в меньшую? я кстати сделал уголок, но вот запятая всё косячит
![]() не знаю пока, если пойму возьмусь за твою идею) |
Lapp |
![]()
Сообщение
#22
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
хотел ещё узнать при конвертации если количество знаков в дробной части увеличивается часть из них может перейти в целую часть числа? Дробная часть меньше единицы, целая - больше. Они живут отдельно, независимо. Нет, знаки не могут "переходить". Я тут на досуге накорябал все четыре действия над вещественными числами ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
andriano |
![]()
Сообщение
#23
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Дробная часть меньше единицы, целая - больше. Они живут отдельно, независимо. Нет, знаки не могут "переходить". Я тут на досуге накорябал все четыре действия над вещественными числами ![]() 1. Что знечит "любое основание"? Или числа хранятся в виде текста? 2. 15 минут на конвертацию числа - это сильно даже для IBM PC с ее 4.77. МГц. ![]() |
Lapp |
![]()
Сообщение
#24
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
1. Что знечит "любое основание"? Или числа хранятся в виде текста? andriano, если вступаешь в разговор не в его начале - будь добр, потрудись прочесть предыдущие мессаджи..2. 15 минут на конвертацию числа - это сильно даже для IBM PC с ее 4.77. МГц. Неудачная шутка - я делал такие вещи еще на Apple-2 (2 МГц, 8 бит) весьма успешно и достаточно быстро ![]() ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
AlexSt |
![]()
Сообщение
#25
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
lapp, если не трудно, выложи
![]() я вот конвертацию уже рабочую слепил, умножение, деление через конвертацию, осталось подумать над сложжением и вычитанием толковым, но выкладывай всё - интересно! |
Lapp |
![]()
Сообщение
#26
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Выкладываю.
Предупреждаю: 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(c); WriteLn;
ReadLn
end.
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 1:01 |