Какието далекоидущие выводы. На основе чего? мне непонятно
Double одинаков в транке и в 2.6.4. Различие в процедуре округления к десятичному виду, т.е. только в том что вы видете на экране. в памяти и в прцессе вычислений всё идентично.
Код: Выделить всё
uses sysutils;
procedure DumpBytes(const name:string;const a;const len:integer);
var i:integer;
pb:pbyte;
begin
pb:=@a;
write(format('%10s:',[name]));
for i:=0 to len-1 do
begin
write(format('%3x',[pb^]));
inc(pb);
end;
write(format(' general number:%g',[double(a)]));
writeln;
end;
var
q:double;
begin
q:=0.1;
DumpBytes('0.1',q,sizeof(q));
q:=0.2;
DumpBytes('0.2',q,sizeof(q));
q:=0.3;
DumpBytes('0.3',q,sizeof(q));
q:=0.1+0.2;
DumpBytes('0.1+0.2',q,sizeof(q));
readln;
end.
транк:
Код: Выделить всё
0.1: 9A 99 99 99 99 99 B9 3F general number:0,10000000000000001
0.2: 9A 99 99 99 99 99 C9 3F general number:0,20000000000000001
0.3: 33 33 33 33 33 33 D3 3F general number:0,29999999999999999
0.1+0.2: 33 33 33 33 33 33 D3 3F general number:0,29999999999999999
2.6.4
Код: Выделить всё
0.1: 9A 99 99 99 99 99 B9 3F general number:0,10000000000000001
0.2: 9A 99 99 99 99 99 C9 3F general number:0,20000000000000001
0.3: 33 33 33 33 33 33 D3 3F general number:0,29999999999999999
0.1+0.2: 33 33 33 33 33 33 D3 3F general number:0,29999999999999999
привычные нам "короткие" дроби на подобии 0.1, 0.2, 0.3 не имеют в двоичном формате точного конечного представления. это вас и вводит в заблуждение