# HP Forums

Full Version: (41CX w/Advantage Pac) Feet inches fractions
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
This code takes decimal inches, e.g., 14.25 in X and returns the following in Alpha:
• feet inches-fractions if flag 1 is clear, e.g., 1' 2-1/4"
• inches-fractions if flag 1 is set, e.g., 14-1/4"
The intended application is formatting inches for display or printing after performing decimal calculations. It uses XTOA to get the ' and " characters as well as AIP from the Advantage PAC.

Note: There's an old forum topic HP-41 Advantage Pac AIP function, anyone? that provides alternatives if AIP isn't available. In particular, Namir provides an equivalent to AIP for the CX.

The maximum denominator, which should be a power of 2, is assumed to be set in register 0. Note that the code rounds to the nearest fraction.

The code modifies flag 2 and registers 2 and 3.

Sample output (Reg 1=8, flag 1 clear):

Code:
``` 12.0000     1' 12.4900     1' 1/2"  1.0000     1"  1.2500     1-1/4" 14.0000     1' 2" 14.0626     1' 2-1/8" 14.3125     1' 2-3/8"  4.0010     4"  7.9990     8"```

Code:
``` LBL "FIF" CLA CF 02 X<=0? "-" ABS RCL 00 * .5 + INT RCL 00 / ENTER FS? 01 GTO 00 INT X=0? GTO 01 12 / INT X=0? GTO 01 AIP 39 XTOA RDN ᵀ" " LBL 01 RDN ENTER ENTER 12 MOD LBL 00 INT X=0? GTO 02 SF 02 AIP LBL 02 RDN FRC X=0? GTO 05 FS? 02 ᵀ"-" SF 02 RCL 00 * STO 01 RCL 00 STO 02 LBL 03 RCL 01 2 MOD X>0? GTO 04 2 ST/ 01 ST/ 02 GTO 03 LBL 04 RCL 01 AIP ᵀ"/" RCL 02 AIP LBL 05 34 FS? 02 XTOA AVIEW END```

EDIT: Based on comments from Xorand and Thomas Klemm, below, fixed the description to refer to the correct register and removed a couple of unnecessary bytes.
What should be in register 00? The code starts out by recalling 00 and multiplying it by x, adding 0.5, then dividing by register 00. By default, my register 00 was equal to zero, so I immediately got a data error when dividing.
(06-22-2022 09:35 PM)DMaier Wrote: [ -> ]The maximum denominator, which should be a power of 2, is assumed to be set in register 1. Note that the code rounds to the nearest fraction.

Based on the code that should be register 00 instead.
The sample output uses 8, but you could also use 16.
Ah, ok, that makes more sense. Will give it another try.

Edited to add: Yes, that worked. Thanks!
Nice to see it's working for you now.

(06-27-2022 01:25 AM)Xorand Wrote: [ -> ]The code starts out by recalling 00 and multiplying it by x, adding 0.5, then dividing by register 00.

You missed taking the integral part with INT:
Code:
```RCL 00 * 0.5 + INT RCL 00 /```

This multiplies the number by the maximum denominator and rounds it to the nearest integer.
It makes sure we end up with nice fractions.

Later on the fraction is reduced if possible:
Code:
```RCL 00 * STO 01 RCL 00 STO 02 LBL 03 RCL 01 2 MOD X>0? GTO 04 2 ST/ 01 ST/ 02 GTO 03 LBL 04```

We could use just .5 instead of 0.5 to save a precious byte and omit the redundant RTN statement at the END to save another one.
(06-27-2022 06:40 PM)Thomas Klemm Wrote: [ -> ]Nice to see it's working for you now.

You missed taking the integral part with INT:

I was paraphrasing, but yes, I saw that.

True on the .5 and RTN. I've got it saved off to card now.
Reference URL's
• HP Forums: https://www.hpmuseum.org/forum/index.php
• :