Преобразование дробной и целой части REAL-числа в два целых
		
 Я написал программу, которая делает это. Это DOS-программа. Вы вызываете ее с  десятичным числом, передаваемым в качестве параметра. После чего программка  выведет 3 колонки, в первой будет находиться исходное число, две остальные будут  содержать числитель и знаменатель. Вы можете преобразовать программу в функцию и  применять ее в своих приложениях, но, думаю, это несложно, и с этим вы  справитесь сами. 
{$N+}
const
 
 
 
begin
 
 
{ это может вызвать резкую головную боль и галлюцинации }
 
	
	
	
		
	
	
Для ее запуска достаточно в подсказке DOS набрать ее имя и число:
CONTFRAC 3.141592654program contfrac; { непрерывные дроби }
{$N+}
const
order    = 20;
vary,
 lasterr,
 error,
 x               : extended;
a               : array[0..order]  of longint;
 i,j,
 n               : integer;
 op,
 p,
 q               : longint;
begin
lasterr := 1e30;
 val(paramstr(1), y, n);
 if n <> 0 then
 halt;
 x := y;
 a[0] := trunc(x);
writeln;
 writeln(a[0]:20,  a[0]:14, 1:14);
{ это может вызвать резкую головную боль и галлюцинации }
for i := 1 to order do  begin
 x := 1.0 / frac(x);
 a[i] := trunc(x);
 p := 1;
 q := a[i];
 for j := pred(i) downto 0  do begin
 op := p;
 p := q;
 q := a[j] * q + op;
 end;
 error := abs(y - int(q) / int(p));
 if abs(error) >= abs(lasterr) then
 halt;
 writeln(a[i]:20, q:14, p:14, error:10);
 if error < 1e-18  then
 halt;
 lasterr := error;
 end;
end.  Теперь попытаюсь объяснить мой алгоритм (он, по-моему, достаточно быстрый). Вот схема:
Допустим, мы используем число 23.56.
Берем наше натуральное число и производим целочисленное деление на 1.
23.56 div 1 = 23
Теперь вычитаем результат из числа, с которого мы начали.
23.56 - 23 = .56
Для преобразования значения в целое мы просто умножаем его на 100, и, при необходимости, приводим его к целому.
valA := (val div 100);
valB := (valA - val); or valB := (valA - val) * 100;
val = 23.56
ValA = 23
ValB = .56 or 56
