Floating point value is exactly the same, as fixed point value. I.e. X bits go to integer part and Y=N-X, where N - is number of bits in mantissa, bits go fractional part. Only difference - point isn't fixed, i.e. we can set, how many bits go to integer part and how many to fractional one.

Incorrect. You confuse fractional part with significand (or mantissa). Frac(x) returns the non-integer part of x (see

https://www.freepascal.org/docs-html/rtl/system/frac.html). Since there are only 52 explicit and one implied bits in the significand of a binary-64 double, all double precision numbers x > 2^52 have frac(x)=0, ie are integers (this feature is used in the new code for frac,

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/x86_64/math.inc?r1=38856&r2=38903), all x > 2^53 are even integers etc.

5432101234567890.5 -> frac(x) = 0, int(x) = 5432101234567890

5432101234567891.5 -> frac(x) = 0, int(x) = 5432101234567892

5432101234567891.25 -> frac(x) = 0, int(x) = 5432101234567891

9432101234567891.25 -> frac(x) = 0, int(x) = 9432101234567892

(Note the round to even). If you don't believe this, here is a test program (compile as 64-bit)

uses

math;

const

x: array[0..3] of double = (5432101234567890.5, 5432101234567891.5,

5432101234567891.25, 9432101234567891.25);

var

i: integer;

begin

for i:=0 to 3 do begin

writeln(x[i]:20, ' ', frac(x[i]):20, int(x[i]):30:5);

end;

end.

with the output

`D:\Work\DAMath>D:\FPC304\bin\i386-win32\ppcrossx64.exe xx2.pas`

Free Pascal Compiler version 3.0.4 [2017/10/06] for x86_64

Copyright (c) 1993-2017 by Florian Klaempfl and others

Target OS: Win64 for x64

Compiling xx2.pas

Linking xx2.exe

12 lines compiled, 0.2 sec, 71680 bytes code, 4980 bytes data

D:\Work\DAMath>xx2.exe

5.432101234568E+015 0.000000000000E+000 5432101234567890.00000

5.432101234568E+015 0.000000000000E+000 5432101234567892.00000

5.432101234568E+015 0.000000000000E+000 5432101234567891.00000

9.432101234568E+015 0.000000000000E+000 9432101234567892.00000