Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.189.247] |
|
Сообщ.
#1
,
|
|
|
doubleR:=m+intr; // <---- Здесь точность теряется Текст программы: function stepen(x,n:longint):longint; var k,i:longint; begin k:=1; if n=0 then k:=1 else for i:=1 to n do k:=k*x; stepen:=k; end; function _10toR(x:longint;R:longint):string; var i,ost:longint; s,st,chislo:string; begin repeat ost:=x mod R; x:=x div R; if ost>9 then st:=chr(ord('A')-10+ost) else str(ost,st); s:=s+st; until x=0; for i:=1 to length(s) do chislo:=chislo+s[length(s)-i+1]; _10toR:=chislo; end; function _Rto10(s:string;R:longint):longint; var i,z,m,n:longint; begin m:=0; for i:=1 to length(s) do begin val(s[i],n,z); if z<>0 then n:=10+ord(UpCase(s[i]))-ord('A'); m:=m+stepen(R,length(s)-i)*n; end; _Rto10:=m; end; function AnyToDec(s:string;R:longint):real; var ints:string; doubles:string; intR:longint; i,z,n:longint; doubleR,m:real; begin ints:=copy(s,1,pos('.',s)-1); //целая часть intr:=_Rto10(ints,r); doubles:=copy(s,pos('.',s)+1,Length(s)-1); //дробная часть m:=0; for i:=1 to length(doubles) do begin val(doubles[i],n,z); if z<>0 then n:=10+ord(UpCase(doubles[i]))-ord('A'); m:=m+n/(stepen(R,i)); end; writeln(m:32:10); // <---- Здесь все хорошо doubleR:=m+intr; // <---- Здесь точность теряется writeln(doubler:32:10); AnyToDec:=doubler; end; function DecToAny(x:real;R:longint):string; var tochnost,intx : longint; doublex,tempx : real; ints,doubles : string; begin ints:=_10toR(Round(int(x)),r); doublex:=frac(x); doubles:=''; tochnost:=1; while (doublex>0.0) or (tochnost=8) do begin doublex:=doublex*r; intx:=round(doublex-frac(doublex)); doublex:=doublex-intx; doubles:=doubles+_10toR(intx,r); tochnost:=tochnost+1; end; DecToAny:=ints+'.'+doubles; end; begin writeln(_Rto10('12abcdef',16)); Writeln(_10toR(313249263,16)); writeln(AnyToDec('12abcdef.888',16):32:12); Writeln(DecToAny(313249263.9296875,16)); readln; end. Прикреплённый файл____________________.png (54,53 Кбайт, скачиваний: 476) Добавлено Выхожу за пределы представления real? |
Сообщ.
#2
,
|
|
|
Цитата Выхожу за пределы представления real? Да. Если твой real = double, то на мантиссу у него отводится 53 бита, что соответствует 15-16 десятичным цифрам, что и наблюдается на картинке |
Сообщ.
#3
,
|
|
|
Double тоже пробовал. Компилятор fpc
Добавлено Значит, эта функция будет выводить string. Косяков быть не должно как бы |