(49G) Integer to Long Real Programme
|
05-21-2015, 08:27 PM
(This post was last modified: 06-15-2017 01:45 PM by Gene.)
Post: #1
|
|||
|
|||
(49G) Integer to Long Real Programme
Some time ago I wrote a programme to convert zints to long reals. Looking at the programme again, I realised it was only good for values < 10^500. Here's the old programme:
OLDPROG :: CK1&Dispatch # FF :: DUPDUP CODE 00025 143174E78FB9760131174143818F858DC7530 DUP BINT13 #< case2drop FPTR2 ^Z2%% BINT12 #- Z10_ SWAP FPTR2 ^PPow# FPTR2 ^ZMod DUPUNROT FPTR2 ^RSUBext FPTR2 ^Z2%% SWAP FPTR2 ^Z2%% %%+ ; ; And here's the new programme good for zints as large as you like. If anyone else has done this please tell me - improvements most welcome. NEWPROG :: CK1&Dispatch # FF :: FPTR2 ^DupZIsNeg? ITE %% -1E0 %%1 SWAP FPTR2 ^ZAbs DUP FPTR2 ^Z>S DUPLEN$ DUP BINT13 #< case2drop :: FPTR2 ^Z2%% %%* ; ROTDROP OVER BINT1 BINT12 SUB$ FPTR2 ^S>Z FPTR2 ^Z>R %MANTISSA %>%% ROT BINT13 BINT16 SUB$ FPTR2 ^S>Z FPTR2 ^Z2%% %% 1E15 %%/ %%+ %%10 ROT #1- FPTR2 ^PPow# %%* %%* ; ; |
|||
05-22-2015, 07:20 AM
(This post was last modified: 05-22-2015 01:23 PM by Gerald H.)
Post: #2
|
|||
|
|||
RE: HP 49G: Integer to Long Real Programme
I'm sorry to say the above programme does not deal with numbers of the form 123456789012006 correctly, but just drops the bold zeros.
The programme below should correct that error. :: CK1&Dispatch # FF :: :: FPTR2 ^DupZIsNeg? SWAP FPTR2 ^ZAbs DUP FPTR2 ^Z>S DUPLEN$ #1-DUP BINT12 #< case2drop FPTR2 ^Z2%% ROTDROP OVER BINT13 1_#1-SUB$ FPTR2 ^S>Z FPTR2 ^Z>R %MANTISSA %>%% ROT BINT13 BINT16 SUB$ CHR_. >H$ palparse DROP %>%% %% 1E11 %%/ %%+ %%10 ROT FPTR2 ^PPow# %%* ; SWAP NOT?SEMI %%CHS ; ; |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 2 Guest(s)