Фон
Я хочу создать модульный тест для проверки некоторых аспектов rtl Delphi, и для этого я хочу использовать очень специфические значения с плавающей запятой IEEE, которые я хочу создать непосредственно из их двоичного представления.
Я до сих пор придумал эту рутину, и она действительно работает.
function TestIEEEDouble.BuildDoubleFromRawInt64(const aBinData:UInt64):double;
begin
CheckEquals(sizeof(aBinData),sizeof(Result),'sizeof(aBinData),Sizeof(Result)'); // ensures we dont mess up with wrong types
Move(aBinData,Result,sizeof(Result));
end;
Он используется следующим образом (бинданные могут быть ошибочными, но вопрос не в этом):
procedure TestIEEEDouble.Setup;
begin
inherited;
FSmallestPositiveDouble:=BuildDoubleFromRawInt64($0000000000000001);
FSmallestNegativeDouble:=BuildDoubleFromRawInt64($8000000000000001);
FLargestPositiveDouble :=BuildDoubleFromRawInt64($7FEFFFFFFFFFFFFF);
FLargestNegativeDouble :=BuildDoubleFromRawInt64($8FEFFFFFFFFFFFFF);
end;
Вопрос
Есть ли синтаксис, который позволил бы создать const double
непосредственно из двоичного (шестнадцатеричного) представления, выглядящего примерно так:
const
cSmallestPositiveDouble:double=double($0000000000000001);
Где результат явно НЕ должен быть 1.0
(именно с таким синтаксисом), а (близко к) 4.94065645841247e-324
begin const cSmallestPositiveDouble: Double = BuildDoubleFromRawInt64($0000000000000001);
- person Andreas Rejbrand   schedule 17.01.2021