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