## HP15c program: convert a floating point number into a fraction (numerator and denominator)

```command         display

f LBL E        001-42,21,15
g ABS          002-43    16
STO 0        003-44     0
1            004-       1
STO 1        005-44     1
f LBL 9        006-42,21, 9
R_arrow_down 007-      33
1/x          008-      15
STO * 1      009-44,20, 1
Enter        010-      36
g INT          011-43    44
-            012-      30
4            013-       4
CHS          014-      16
10^x         015-      13
g x<=y         016-43    10
GTO 9        017-   22  9
RCL 0        018-45     0
RCL 1        019-45     1
g INT          020-43    44
*            021-      20
f PSE          022-42    31
g LST X        023-43    36
g RTN          024-   43 32
```

This program uses the following labels: LBL E and LBL 9

### Using the program

I start every program with a label. This way you can have a number of programs in your 15c and you just select which one to run by pressing f LABELNAME (f E in this case) or GSB LABELNAME (GSB E in this case).

Let's say you would like to know what 0.15625 as a fraction is.
You type: 0.15625, GSB E
The display shows "running" and then you see first 5 and ten sec later 32. The fraction is therefore 5/32 (numerator=5 and denominator=32). 32 remains in X (display) after the program finished and 5 remains in Y (type key "x><y" to see it).

Note that this program shows the resulting fraction always with positive numbers. That is: both 0.15625 and -0.15625 will result in 5/32. An extra step could be added to add the sign at the end but that would make the program longer and it's not really needed.

### Algorithm

```0.15625 -> 1/0.15625 = 6.4
take off the integer part: 6.4 - 6=0.4
0.4 -> 1/0.4 = 2.5
take off the integer part: 2.5 -2 =0.5
0.5 -> 1/0.5 = 2
take off the integer part: 2-2=0
0 -> end of program

denominator = 6.4 * 2.5 * 2 = 32
numerator = 0.15625 * denominator = 0.15625 * 32 = 5
```