UP | HOME

free42 Custom Unit Conversion Factors

Author: Mitch Richling
Updated: 2024-02-12 12:55:56

Copyright 2024 Mitch Richling. All rights reserved.

Table of Contents

1. Metadata

The home for this HTML file is: https://richmit.github.io/hp42/unit.html

A PDF version of this file may be found here: https://richmit.github.io/hp42/unit.pdf

Files related to this document may be found on github: https://github.com/richmit/hp42

Directory contents:

src - The org-mode file that generated this HTML document
src_42s - Ready to convert source listings for 42s code in this document
docs - This html document and associated PDF
bin - Importable RAW program files

2. Introduction

This application has a few unit conversions for temperatures; however, the focus is on a nice way to organize and recall various conversion factors I frequently use. That is to say, I don't really want to convert "in" to "cm", instead I want to push the conversion factor to the stack.

Aside from the TEMP menu, all of the menus have the same structure. The first menu key is the "base" unit for that page. Pressing any menu key will push a conversion factor for the given unit to the "base" unit to the stack. For example, if the left most menu is "mm" then pressing the "in" button will push 25.4 to the stack – the value you would multiply by to convert from inches to millimeters or divide by to convert from millimeters to inches.

Some constants are little programs. In some cases these are derived conversion factors, and the programs make that explicit. More importantly in cases when the base conversion factors are exact quantities, the programs insure we obtain machine accuracy – i.e. 1/2.54 is better than 0.3937.

3. Units

3.1. Conversion Factors

Type Conversion Description ……….
Leng:mm 1.0  
Leng:Ang 1e-7 Angstrom
Leng:μm 0.001 Micron
Leng:mil FUNC 01; 25.4; 1000; ÷ mil (1/1000 in)
Leng:cm 10  
Leng:in 25.4 Inch
Leng:in 1  
Leng:hand 4  
Leng:ft 12  
Leng:yd FUNC 01; 3; 12; ×  
Leng:fathom FUNC 01; 6; 12; ×  
Leng:mile FUNC 01; 5280; 12; ×  
Leng:km 1  
Leng:mi FUNC 01; 2.54; 12; ×; 5280; ×; 1e5; ÷ Int Mile
Leng:us mi 1.60934721869 US Mile
Leng:nmi 1.852 Int Nautical mi
Leng:m 0.001  
Leng:ft FUNC 01; 2.54; 12; ×; 1e5; ÷ Intl Foot
Area:hectare 1 hectare
Area:acre 0.40468564224 Int Acre
Area:m^2 0.0001  
Area:yd^2 8.36127360001e-5  
Vol:l 1  
Vol:qt 0.946352946 US Lq Quart
Vol:gal FUNC 01; 0.946352946; 4; × US Lq Gal
Vol:cc 0.001  
Vol:butt FUNC 01; 0.946352946; 4; ×; 126; × US Butt 126 US Gal
Vol:bbutt FUNC 01; 4.54609; 108; × UK Butt 108 UK Gal
Vol:tsp 1 Teaspoon
Vol:tbsp 3 Tablespoon
Vol:flOZ 6 fl oz
Vol:cup 48 Cup
Vol:pint 96 Pint
Vol:qt 192 Quart
Time:sec 1  
Time:min 60  
Time:hour 3600  
Time:day 86400  
Time:week 604800  
Time:year 31536000 365 day year
Time:day 1  
Time:year 365 Conentional
Time:acnt 360 Accounting
Time:greg 365.2425 Mean Gregorian
Time:julian 365.25  
Time:astro 365.256363004 Astronomical
Mass:kg 1  
Mass:lb 0.45359237 Pound Int
Mass:g 1e3  
Mass:ozWT 28e3 Ounce Food Weight
Mass:ozTr 31.1034768e3 Ounce Troy
Mass:stone FUNC 01; 0.45359237; 14; × Int Stone
Mass:lb 1  
Mass:US ton 2000 US (short) Ton
Mass:UK ton 2240 UK (long) Ton
Force:N 1  
Force:kgf 9.80665  
Force:lbf FUNC 01; 0.45359237; 9.80665; × Int lbf
Sped:m/s 1  
Sped:mph FUNC 01; 2.54; 12; ×; 5280; ×; 1e2; ÷; 3600; ÷ Int mph
Sped:kph FUNC 01; 1000; 3600; ÷  
Sped:knot FUNC 01; 1.852; 1000; ×; 3600; ÷ Intl nmi
Pres:Pa 1 N/m^2
Pres:bar 100000  
Pres:psi FUNC 01; 1e4; 0.45359237; ×; 9.80665; ×; 2.54; X^2; ÷  
Pres:atm 101325 Standard
Pres:mmHg 133.322  
Pres:inHg 3.386389e3 Conventional
Powr:watt 1  
Powr:BTU/h 0.2930710702 International
Powr:hp 735.49875 Metric
Powr:kcal/h 1.163  
Temp:C→F FUNC 11; 9; ×; 5; ÷; 32; +  
Temp:F→C FUNC 11; 32; -; 5; ×; 9; ÷  
Temp:K→C FUNC 11; 273.15; -  
Temp:C→K FUNC 11; 273.15; +  
▒▒▒▒    
SIPFX Run the SIPFX application  

3.2. Code

(MJR-generate-42-menu-code "UNIT" 
                           0
                           tbl
                           0
                           nil
                           'stay ;; Change to 'exit to exit immediatly after a conversion factor is pushed to the stack
                           'up   ;; Change to 'exit to have the application exit when [EXIT] is pressed
                           'yes
                           (lambda (atrg row) (if (string-equal "SIPFX" atrg) (format "\"%s\"" atrg)))
                           ;;#'MJR-local-only-gen-lab
                           (lambda (atrg target row) 
                             (cl-destructuring-bind (menu cfactor desc) row
                               (let ((print-desc 't))    ;; Set to NIL to not print description
                                 (let* ((dlen (length desc))
                                        (dsc1 (if (> dlen 0)
                                                  (substring desc 0 (min dlen 15))))
                                        (dsc2 (if (> dlen 14)
                                                  (substring desc 15 (min dlen 22)))))
                                   (mapconcat #'string-trim-left 
                                              (cl-remove nil (flatten-list
                                                              (list (split-string (message "%s" cfactor) ";")
                                                                    (and print-desc dsc1 (message "\"%s\"" dsc1))
                                                                    (and print-desc dsc2 (message "├\"%s\"" dsc2))
                                                                    (and print-desc (or dsc1 dsc2) "AVIEW"))))
                                              "\n"))))))

4. SI Prefixes

4.1. Generic

4.1.1. Menu

Prefix Sym Val
centi c 1e-2
milli m 1e-3
micro µ 1e-6
nano n 1e-9
pico p 1e-12
femto f 1e-15
kilo k 1e+3
mega M 1e+6
giga G 1e+9
tera T 1e+12
peta P 1e+15
exa E 1e+18
kibi Ki 1024
mebi Mi 1048576
gibi Gi 1073741824
tebi Ti 1099511627776
pebi Pi 1125899906842624
exbi Ei 1152921504606846976

Normally pressing the menu key will multiply the X value on the stack by the prefix multiplayer. If [SHIFT] is pressed befreo the menu key, then X will be divided by the prefix mulitplyer.

4.1.2. Menu Code

Note: This one will have an END generated to finish the UNIT application.

(MJR-generate-42-menu-code "SIPFX" 
                           0
                           tbl
                           0
                           nil
                           'stay ;; Change to 'exit to exit immediatly after a conversion factor is pushed to the stack
                           'up   ;; Change to 'exit to have the application exit when [EXIT] is pressed
                           'no
                           #'MJR-local-only-gen-lab
                           (lambda (atrg target row) 
                            (cl-destructuring-bind (prefix-str sym-string mult) row
                              (mapconcat #'string-trim-left 
                                         (list (format "%s" mult)
                                               (format "FS? 64")
                                               (format "÷")
                                               (format "FC? 64")
                                               (format "×")
                                               (format "\"%s (%s)\"" prefix-str sym-string)
                                               ;;(format "AVIEW")
                                               )
                                         "\n"))))

4.2. EE Prefixes

For EE problems a smaller set of prefixes is more efficient

4.2.1. Menu

Prefix Sym Val
micro µ 1e-6
nano n 1e-9
pico p 1e-12
▒▒▒▒    
kilo k 1e+3
mega M 1e+6

4.2.2. Menu Code

(MJR-generate-42-menu-code "EEPFX" 
                           30
                           tbl
                           0
                           nil
                           'stay ;; Change to 'exit to exit immediatly after a conversion factor is pushed to the stack
                           'up   ;; Change to 'exit to have the application exit when [EXIT] is pressed
                           'yes
                           #'MJR-local-only-gen-lab
                           (lambda (atrg target row) 
                            (cl-destructuring-bind (prefix-str sym-string mult) row
                              (mapconcat #'string-trim-left 
                                         (list (format "%s" mult)
                                               (format "FS? 64")
                                               (format "÷")
                                               (format "FC? 64")
                                               (format "×"))
                                         "\n"))))

5. EOF