>>Если хочешь использовать больше 6 цифр после запятой .. нужно переходить на тип Extended.
На гифке выше всё рисуется в double без extended. ладно, проехали
Модератор: Модераторы
zub писал(а):На гифке выше всё рисуется в double без extended. ладно, проехали
x:=1.234567e30;
y:=1234567890;
for i:=0 to 1000000 do
x:=x+y;
Single 4 7 significant digits, exponent -38 to +38
Currency 8 50+ significant digits, fixed 4 decimal places
Double 8 15 significant digits, exponent -308 to +308
Extended 10 19 significant digits, exponent -4932 to +4932
zub писал(а):Но спорим мы не изза этого. А изза того что без ухишьрений такое в GL не нарисовать, там предел наступает гораздо раньше. т.к. то что мы туда скармливаем внутри еще обрабатывается - умножается на матрицы
implementation
const
line1:Array [0..1,0..1] of Extended =((10E10,10E10),(10E10+10,10E10+10));
line2:Array [0..1,0..1] of Extended =((0,0),(10,10));
x10e10:Extended=10e-10+0.0000000003;
_maxInt:Integer=1000;
_minInt:Integer=-1000;
{$R *.lfm}
{ TForm1 }
function fExtendedToInteger(x:Extended):Integer;
begin
if x>_maxInt //High(Integer)
then Result:=_maxInt //High(Integer)
else
if -x<_minInt //Low(Integer)
then Result:=_minInt //Low(Integer)
else
Result:=trunc(x);
end;
procedure TForm1.Panel1Paint(Sender: TObject);
var
pcx,pcy:Integer;
l1:array [0..1,0..1] of Integer;
l2:array [0..1,0..1] of Integer;
begin
Panel1.Canvas.Pen.Color:=clBlack;
Panel1.Canvas.Pen.Width:=10;
Panel1.Canvas.Brush.Color:=clWhite;
Panel1.Canvas.Clear;
pcx:=Panel1.Width div 2;
pcy:=Panel1.Height div 2;
l1[0,0]:=fExtendedToInteger(line1[0,0]);
l1[0,1]:=fExtendedToInteger(line1[0,1]);
l1[1,0]:=fExtendedToInteger(line1[1,0]);
l1[1,1]:=fExtendedToInteger(line1[1,1]);
l2[0,0]:=fExtendedToInteger(line2[0,0]);
l2[0,1]:=fExtendedToInteger(line2[0,1]);
l2[1,0]:=fExtendedToInteger(line2[1,0]);
l2[1,1]:=fExtendedToInteger(line2[1,1]);
Panel1.Canvas.Pen.Color:=clBlue;
Panel1.Canvas.MoveTo(pcx+l1[0,0],pcy-l1[0,1]);
Panel1.Canvas.LineTo(pcx+l1[1,0],pcy-l1[1,1]);
Panel1.Canvas.Pen.Color:=clRed;
Panel1.Canvas.MoveTo(pcx+l2[0,0],pcy-l2[0,1]);
Panel1.Canvas.LineTo(pcx+l2[1,0],pcy-l2[1,1]);
end;
procedure TForm1.Panel2Paint(Sender: TObject);
var
pcx,pcy:Integer;
l1:array [0..1,0..1] of Integer;
l2:array [0..1,0..1] of Integer;
begin
Panel2.Canvas.Pen.Color:=clBlack;
Panel2.Canvas.Pen.Width:=10;
Panel2.Canvas.Brush.Color:=clWhite;
Panel2.Canvas.Clear;
pcx:=Panel2.Width div 2;
pcy:=Panel2.Height div 2;
l1[0,0]:=fExtendedToInteger(line1[0,0]*x10e10);
l1[0,1]:=fExtendedToInteger(line1[0,1]*x10e10);
l1[1,0]:=fExtendedToInteger(line1[1,0]*x10e10);
l1[1,1]:=fExtendedToInteger(line1[1,1]*x10e10);
l2[0,0]:=fExtendedToInteger(line2[0,0]*x10e10);
l2[0,1]:=fExtendedToInteger(line2[0,1]*x10e10);
l2[1,0]:=fExtendedToInteger(line2[1,0]*x10e10);
l2[1,1]:=fExtendedToInteger(line2[1,1]*x10e10);
Panel2.Canvas.Pen.Color:=clBlue;
Panel2.Canvas.MoveTo(pcx+l1[0,0],pcy-l1[0,1]);
Panel2.Canvas.LineTo(pcx+l1[1,0],pcy-l1[1,1]);
Panel2.Canvas.Pen.Color:=clRed;
Panel2.Canvas.MoveTo(pcx+l2[0,0],pcy-l2[0,1]);
Panel2.Canvas.LineTo(pcx+l2[1,0],pcy-l2[1,1]);
end;
Вернуться в Разработки на нашем сайте
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1