▼
Posts: 247
Threads: 26
Joined: Oct 2007
I wrote a small program for calculating prime factors of a given number, based loosely on the one found here:
http://www.hpmuseum.org/software/67pacs/67factor.htm
For kicks, I made a version for both the 32sii, and the 20s. Despite the 20s being algebraic, there was actually very little that needed to be adapted for this particular program. Both are available here:
http://dave.brittens.org/HP20s/PrimeFactors.txt
http://dave.brittens.org/HP32sii/PrimeFactors.txt
For both programs, enter a positive integer, then XEQ F. Execution pauses when a factor is found. Press R/S to find the next factor. When 0 is displayed, there are no more factors.
Interestingly enough, the 20s seems to produce results noticeably faster. Using the input 869,103,111, the 32sii finds the last factor (4,561) in about 1:20 total. The 20s takes just under 1:00.
Anybody have an original 32s lying around and care to see how it clocks in? I'm assuming a 21s will have the same speed as a 20s.
▼
Posts: 1,792
Threads: 62
Joined: Jan 2005
Dave --
My HP-32S (1990 model with recessed display) takes 56 seconds to obtain all four factors.
Since it lacks the "<=" and ">=" tests, a small workaround was necessary:
32SII: 32S:
Z24 x<=y? Z24 x>y?
Z25 GTO Z Z25 GTO V
Z26 RCL X Z26 GTO Z
Z27 STO F V01 LBL V
Z28 XEQ X V02 RCL X
Z29 CLx V03 STO F
Z30 RTN V04 XEQ X
V05 CLx
V06 RTN
Here are my checksums on the HP-32S, which are not the same as those on the HP-32SII for the same instructions:
LBL F 714D 10.5
LBL Y 0116 19.5
LBL Z E93C 39.0
LBL V 721A 9.0
LBL W 63E1 15.0
LBL X 5878 15.0
Between two models having the same microprocessor, why does the more-advanced one tend to run somewhat slower? For example, it has also been claimed that the HP-11C is marginally faster than the HP-15C. I speculate that the lengthier microcode of the more-advanced models causes machine-level instructions to take a bit longer to be found from op-codes. However, more-knowledgeable folks might have a better answer.
Addendum:
Thinking about this a bit more, I'd assume that the ROM contents include some kind of index -- an address lookup table that points to where the instructions for a given op-code reside in ROM. That would speed things up, but access is probably still a bit slowed by larger ROM contents.
Another factor is overloading of operations. Consider the HP-11C versus the HP-15C:
On the HP-11C, "*" only multiplies two real-valued scalars.
On the HP-15C, "*" can multiply two real-valued scalars, two complex-valued scalars, two matrices, or a real scalar and a matrix. Under the microcode for "*" (hex op-code FC), conditional tests for the types of both arguments and status of flag 8 must be performed before the multiplication is done.
Regarding the HP-32S and HP-32SII, the display and memory management are almost the same. The difference in functionality is mostly the HP-32SII's equations and fractions -- not nearly as substantial as the difference between the HP-11C and the HP-15C. Thus, the difference in execution time between 76-80 seconds (HP-32SII) and 56 seconds (HP-32S) is surprising to me. I had 207 bytes of other programming in the HP-32S at the time of the test, so I can't necessarily credit fast GOTO's.
-- KS
Edited: 4 Jan 2010, 1:12 a.m. after one or more responses were posted
▼
Posts: 247
Threads: 26
Joined: Oct 2007
Quote:
Between two models having the same microprocessor, why does the more-advanced one tend to run somewhat slower? For example, it has also been claimed that the HP-11C is marginally faster than the HP-15C. I speculate that the lengthier microcode of the more-advanced models causes machine-level instructions to take a bit longer to be found from op-codes. However, more-knowledgeable folks might have a better answer.
-- KS
It's actually not a huge surprise, since the two machines - according to Wikipedia, at least - both run a 640 KHz CPU. The 32sii has a more complicated display system and memory management, plus more opcodes as you mentioned. That translates to more overhead to lug around - overhead which is evidently more expensive than managing the AOS input of the 20s.
I was under the impression that the segmented-display Pioneers had a slower CPU than the dot-matrix ones, which is why I initially found the results unexpected. But given the hardware details, things seem to fall into place.
And a similar algorithm on my 48GX executes in under half a minute, despite the machine "feeling" slower than the Pioneers. Must be just an illusion caused by the overhead of drawing to that huge bitmapped display!
▼
Posts: 2,448
Threads: 90
Joined: Jul 2005
Instead of Wiccanpedia, you can always check Craig Finseth's site:
http://www.finseth.com/hpdata/hp20s.php
http://www.finseth.com/hpdata/hp32sii.php
Edited: 3 Jan 2010, 9:53 a.m.
▼
Posts: 247
Threads: 26
Joined: Oct 2007
Yeah, normally I'd check there, but it seems like his site's been acting up a bit lately. Anybody else having trouble connecting, or is it just me?
Posts: 1,248
Threads: 33
Joined: Aug 2007
I'm curious, Bill, is your reference meant to disparage Wikipedia, or just a humorous intentional misstatement?
It is a serious question, since I myself am not sure what to make of Wikipedia.
▼
Posts: 801
Threads: 36
Joined: Nov 2005
While I may use Wikipedia myself for a few things, I do not like to recommend it to students. It is true I have never seen any scientific or mathematical pages incorrect... though there may have been some incomplete ones... this is not true for other subjects. Until someone has the ability, or more properly, the maturity, to judge the correctly the content, one should be circumspect in recommending Wikipedia.
Besides, it is an open system, allowing for frequent modification. Except maybe for the Ten Commandments and Boltzmann's original formulation of the second law of thermodynamics, nothing is set in stone... but electronic ether flux is too far toward the other extreme.
I am personally careful about anything I see in Wikipedia. This extends even to scientific and technical pages.
▼
Posts: 247
Threads: 26
Joined: Oct 2007
That's kind of my sentiment as well. There's a good body of knowledge there, but it should be treated as a starting point before branching out to more reputable sources. I refer to it a lot, but I've never once used it as a source for an academic paper. I have done some minor article writing and editing, though.
▼
Posts: 2,448
Threads: 90
Joined: Jul 2005
Hi Dave,
I would make the following small comment regarding Wikipedia:
Quote:
There's a good body of knowledge there
changes to:
There's a good body of information there,
...as knowledge requires understanding and human insight. Wikipedia is full of information, the veracity of which is by the definition of Wikipedia always open to question to a greater degree than is the case with reputable sources.
Or to put it another way: if you need to calculate the strength of something that life depends on, do you go to Wikipedia, or Timoshenko?
Edited: 3 Jan 2010, 7:46 p.m.
Posts: 540
Threads: 22
Joined: Jan 2005
Quote:
Except maybe for the Ten Commandments ... nothing is set in stone
Good thing you said "maybe" there. The Ten Commandments are more commonly set in type these days, a process which is prone to human fallibility. Witness the "Wicked Bible" or "Adulterous Bible", a 1631 reprint of the King James Bible, which included the memorable injunction:
Thou shalt commit adultery.
Oops. (See http://en.wikipedia.org/wiki/Wicked_Bible for the full story.)
Best,
--- Les
[http://www.lesbell.com.au]
▼
Posts: 1,248
Threads: 33
Joined: Aug 2007
It would appear that this version is the one taken to heart these days.
Posts: 8
Threads: 3
Joined: Jan 2010
Dave, thanks for posting this. I don't have a 32S, but I wanted to see how my 35S would perform. Your program found all factors in 1:17 on my 32sii, and in 1:27 on my 35S.
On the 32Sii, it ran in 1:16 if I started the program with R/S instead of with XEQ F.
▼
Posts: 801
Threads: 36
Joined: Nov 2005
Yeah, it's good to get back on topic.
I have both the 20S and the 32SII. Maybe I should try timing them, too, though I've never ever tried to program my 20S.
But I have tried some simple addition algorithm that's supposed to lead to convergence on the 32SII, 33S, 35S, and 50g. Yeah, the 32SII is the slowest, and the 33S is surprisingly fast, though significantly slower than the 50g (why did I even bother testing against this one??). I did not make it a scientific test; I started the program and went off somewhere, checking them only intermittently, so I have no absolute numbers, but what the 50g may take about an hour will take very many hours on the smaller calculators, especially the 32SII.
Posts: 1,545
Threads: 168
Joined: Jul 2005
Not bad huh?
Was not using a 50g, no C programming.
Sound interesting?
▼
Posts: 528
Threads: 40
Joined: Dec 2008
Okay, I'll bite. How did you do it, Gene?
Dave
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
The truth is out there. Either no one is looking or no one has found it yet. Soon as someone does, I'll talk.
The old PPC Journal had a 10 digit prime number "worst case" test they used. The number was 9,999,999,967, the largest 10 digit prime, I believe.
What did this in 4 seconds determines this to be prime in less than 50 seconds.
Edited: 8 Jan 2010, 11:19 a.m.
▼
Posts: 875
Threads: 37
Joined: Jul 2005
Perhaps the truth is here?
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
▼
Posts: 4,587
Threads: 105
Joined: Jul 2005
Ok, that's good news, though a scientific calc with similar features would have been even better. But one could bring forward the argument that after all financial people caused the world economic crisis, not scientists, thus financial people need a proper calc more urgently.
I want to repeat a question I asked here weeks earlier, but didn't get an answer then: Does the 30b feature the same interface the 20b does, allowing some customization?
Since you mentioned the improved keyboard in the linked articles, one could think of mating a 30b keyboard with 20b electronics else.
(Edited to include the link.)
Edited: 9 Jan 2010, 4:28 p.m. after one or more responses were posted
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
Yes. Same interface. No need to mate a 30b keyboard with 20b electronics. Just use a 30b.
Prime factor routine factors 9,999,999,967 as prime in a bit over 50 seconds. Try that with the 32s, 32s2, or even the 35s.
Not bad for a business calculator.
P.S. I assume HP made a business calculator because more people buy them. So, let's say 12 man months of effort to sell tons of calculators or for something much much smaller. Easy choice, but I'm guessing.
▼
Posts: 875
Threads: 37
Joined: Jul 2005
I guess I can admit now that my 20b repurposing proposal was really intended as a 30b repurposing proposal. I had considered concepts for the 20b, but with its relatively poor keyboard, it did not seem worth the trouble. With its metal-dome keyboard, the 30b would be a worthwhile candidate, I think.
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
How long does the 20s, 35s take on that?
I'm surprised so far such a small amount of interest. ;-)
Business machine, yes. RPN programmable with many scientific functions? yes.
▼
Posts: 203
Threads: 29
Joined: Nov 2009
I'm at 33 Minutes and counting on a 35s
▼
Posts: 203
Threads: 29
Joined: Nov 2009
I had to step away, it was done when I got back.
Time is something less than 51 minutes on the 35s
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
So, the new model is maybe 70-80 times faster.
Interesting. ;-)
Posts: 4,587
Threads: 105
Joined: Jul 2005
For sure the 30b will approach good ol' HP quality better than the 20b does. If we extrapolate this series of 2 (a bit keen ;) I admit), then we'd get a model with this keyboard and a better, i.e. more versatile display next. Already the 30b, however, shall be sufficient to demonstrate successfully where repurposing may lead us to.
Ceterum censeo: HP, launch a 43S (you still have the chance to be the first).
Walter
Posts: 528
Threads: 40
Joined: Dec 2008
Does anyone know (and can they say) anything about the reason for the 30b's speed improvements? Faster processor? Native (i.e., not Saturn) code?
I'm hoping, and assuming, that HP is porting their Saturn assembly code to ARM so they can get rid of the Saturnator emulator. That would greatly speed up the calculators. A 32-bit address space would simplify them greatly and allow for much more memory too.
Dave
▼
Posts: 1,278
Threads: 44
Joined: Jul 2007
Yes people could talk about the 30b, it has been announced. It is running native code also. No emulation.
I'm actually pretty sure the 4 second time would be cut in half if it wasn't being dropped down from 30MHz to 15MHz. Somewhere in there is a trigger to drop speed to save power when a program is taking a long time. I haven't checked to see what that threshold is.
The math library in the 20/30b isn't so much "ported" (which I will interpret here as rewriting it from one system to another) but rather was remade in platform independent C using the original math library as a base.
You wouldn't want to attempt to recreate all the saturn code in something like a 50g in C or ARM either. There are a lot of things that are very much keyed to the old processor, and frankly, there are better ways to do things in a lot of ways. Those systems were generally limited by technology and memory in a way modern systems aren't. It is much more important to have platform independence and maintainability than saving a few nibbles here or there.
TW
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
30b review at hpcc.org ... join and get Datafile!
This review lays out the differences and improvements to the 30b compared to the 20b.
There will (eventually) be 40 learning modules online, 6 of which are dedicated to programming.
So, read the review and ask questions.
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
Here is the program that now determines 9,999,999,967 to be prime in about 40 seconds. Must be run in RPN mode, of course.
Byte count: 141 bytes (1/2 of total available)
Checksum: 232
Usage: Enter program catalog by pressing shift Prgm. With this program selected / displayed, key number to factor and press = =. (Yes, that's twice). Displays running while checking factors. If number is prime, displays "Prime" and shows original number. If a factor is found, displays the factor. Press R/S to continue displaying factors. Zero is displayed when all factors have been found.
Sadly, this is faster than the prime factor program that will be in the learning modules. Of course, it is much newer than that one.
FYI...This is not my code.
goto 06
lbl 02
rcl + 3
sto 3
rcl 1
swap
/
math
up
= // performs a FP instruction
gf 03 // goto if false i.e. 0
rtn
lbl 00
4
call02 // subroutine call. 4 levels available.
2
call02
4
call02
2
call02
4
call02
6
call02
2
call02
6
call02
rcl 1
LN
gt 01 // goto if true i.e. non-zero
on // if non zero, this clears to zero
stop // This is equivalent to KILL on the RPL machines.
lbl 01
rcl 2
rcl 3
?>= // note: this compares rcl 2 >= rcl 3. RPL conditional order
gt 00
rcl 1
sto 3
call03
on
stop // This is not R/S but KILL
lbl 03
rcl 1
rcl / 3
sto 1
sqrt
math
up
up
= // performs an IP instruction
sto 2
rcl 4
rcl 3
?=/= // rcl 4 not equal to rcl 3 ?
gt 05 // if non-zero i.e. true go to 05.
msg Prime // displays word Prime on level 2 of display.
lbl 05
r/s
on
goto 02
lbl 06
sto 1
sto 4
sqrt
math
up
up
= // performs IP instruction
sto 2
0
sto 3
2
call02
1
call02
2
call02
2
call02
rcl 1
LN
gt 00 // if non-zero, go back. If LN is = zero, value was 1
on
stop
Edited: 11 Jan 2010, 1:48 p.m. after one or more responses were posted
▼
Posts: 1,477
Threads: 71
Joined: Jan 2005
I didn't write this either, but will just mention a few things that might make it more understandable to those of us who haven't programmed on a 30b yet.
- There are no line numbers in the editor but there is a checksum and byte count (Gene you should include that.)
- This is a keystroke macro language not a typical RPN language so to get the IP fucntion on the Math menu, for example, you'd press: Math, Up, Up, =. The = essentially means to execute that function and put the result in the X register.
- Comparison functions like, ?>=, push a 1 if true on to the stack or a 0 if false. Almost always these are followed by a GT or GF function, Go-if-True or Go-if-False. These functions pop the stack and branch if the value is non-zero or zero, respectively.
- Label searches start at the beginning of memory. If you have a lot of code prior to the branch target this will substantially increase execution time for programs that do a lot of looping. To minimize this the code starting at Lbl 02, in this example, has been put at the beginning of memory and that's why you see the funky goto 06 at the top of the code, it branches to the start of the main code.
- you see "on" in a couple of places in the code, this is a CLx. The shared button reads ON/CE.
-Katie
▼
Posts: 1,278
Threads: 44
Joined: Jul 2007
There is a line/step counter in the editor. It is in the exponential area.
TW
▼
Posts: 1,477
Threads: 71
Joined: Jan 2005
There is indeed but since it's not on the left margin, program listings typed in by users typically do not show the line number.
-Katie
Edited: 11 Jan 2010, 2:02 p.m.
▼
Posts: 1,278
Threads: 44
Joined: Jul 2007
Ah. Got it. Makes more sense now. :-)
TW
Posts: 1,392
Threads: 142
Joined: Jun 2007
I didn't write this code either! Actually, that honor goes to Dave Britten at the beginning of this thread, who adapted his code from the original code on the HP-67 math pak. From Dave's code, Tim Wessman wrote this code for the 30b, which I then modified (at Katie's suggestion) to move the most used subroutines to the top of the code so it would execute faster on the 30b. Whew.
Here is a hand-written annotation of the algorithm, before I rearranged the order of subroutines to make it run faster. The version that Gene listed above in this thread finds the primality of 9,999,999,967 in 40 seconds on the 30b. The annotated one in my link takes about 54 seconds.
I also wrote a version that eliminates all multiples of 7 from the pool of potential factors, but that did not reduce the execution time on the 30b, unfortunately, because most multiples of 7 are also multiples of either 2 or 3 or 5, which are already excluded.
Edited: 11 Jan 2010, 2:55 p.m.
Posts: 4,587
Threads: 105
Joined: Jul 2005
Gene,
you wrote:
Quote:
So, read the review and ask questions.
Well, I take this invitation d;-). I found in your review:
Quote:
The mode menu settings can now be stored and recalled by pressing store or recall and then <SHIFT><MODE>. This key sequence brings up a 12 digit number with each position corresponding to a mode menu item and its setting. ... This is described and a table of these values shown in the Programming Reference learning module.
Where is this information about mode storing and recalling available already? I'd be very interested d:-)
TIA for your help.
▼
Posts: 1,392
Threads: 142
Joined: Jun 2007
Walter, here is the lowdown on the mode settings. When you RCL Mode, you get a 12-digit number. Lets call it: abc,def,ghi,jkl.
- a = 1 for Standard TVM mode, 2 for Canadian TVM mode
- b = 1 for Semi-annual mode, 2 for Annual mode
- c = 1 for Actual day count mode, 2 for 360 day count mode
- d = 1 for thousands separators not visible, 2 are visible
- e = 1 for decimal separator ., 2 for decimal separator ,
- f = 1 for mm.ddyyyy mode, 2 for dd.mmyyyy mode
- g = regression type, 1-7 for: ax+b, a*ln(x)+b, b*e^(ax), b*x^a, b*a^x, a/x+b, and ax^2+bx+c
- h = 1 for 2 variable stats, 2 for 1 variable stats, 3 for 1 variable frequency
- i = 1 for radian mode, 2 for degree mode
- j = 1 for Chain mode, 2 for Algebraic mode, 3 for RPN
- kl = Fix setting, 00-11, 13=Fix -1
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
Good job, Don! :-) Walter, ask anything you like about the 30b. More...more!
Note on the MODE stuff.
As the review says (or tries to say), you don't have to key the entire 12 digits to change a setting and a value that is outside the valid range is ignored.
So, 302 shift sto shift mode will change to fix 2 and RPN mode.
114 shift sto shift mode would change to chain mode and leave the display setting unchanged since 14 is an invalid value.
And, yes, I too want an unshifted store key.
▼
Posts: 1,089
Threads: 32
Joined: Dec 2005
Quote:
Good job, Don! :-) Walter, ask anything you like about the 30b. More...more!
May I ask also? :^)
- Is the bottom half of the case beveled the way the 20b is?
- How flexible is this Canadian Mortgage mode? Say, can I specify monthly payments with annual compounding? Does it mean the first payment gets full interest, the last one 1/12 of the interest when in Begin mode?
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
The external case / shape is the same.
Canadian mortgage mode allows you to specify a value for P/YR and a value for C/YR. These can be set to a combination of any valid individual values.
I don't know exactly how amortizing a Canadian mortgage works, but the computations work and match what I expect.
From the PPC ROM manual description of FI routine:
Canadian Mortgage: Find the monthly end-of-period payment necessary to fully amortize a 25 year, $85,000 loan at 11% compounded semiannually.
Steps on the 30b:
Shift MODE up. INPUT. .... Changes to TVM Canada
Shift P/YR ... displays P/YR of 12
Down...displays C/YR default of 12.
2 INPUT...changes C/YR to 2.
ON/CE
300 N
11 I/YR
85000 PV
0 FV
PMT
Displays -818.15.
Full precision is -818.149794116
Agrees with PPC ROM. ;-) And, yes, I really do check HP financial calculations against the 12c first :-) and then the PPC ROM FI routine. Too much trouble pulling out my HP 92.
Edited: 14 Jan 2010, 12:10 p.m.
Posts: 193
Threads: 10
Joined: Mar 2008
hello,
Internally, all calcualtions are done using a per period interest rate.
in normal mode, the per period interest rate is calculated by dividing the rate by the number of periods.
in canadian mode, the periodic interest rate is calculated using the following formula:
I=(i/c/100+1)^(c/p)-1 (actually, to be more precise: exp-1((c/p)*lnp1(i/c/100)) but who cares...)
therefore, you can have any valid combinaison of ppyr and cpyr...
after that, it's TVM as usuall...
regards, cyrille
▼
Posts: 1,089
Threads: 32
Joined: Dec 2005
Thanks Gene and Cyrille for enlighten me about Canadian Mortgage. I got that conpect apparently wrong :-/.
Posts: 4,587
Threads: 105
Joined: Jul 2005
You wrote:
Quote:
There will (eventually) be 40 learning modules online, 6 of which are dedicated to programming.
I ask: When?
▼
Posts: 1,545
Threads: 168
Joined: Jul 2005
I don't know, but of course, the 30b isn't for sale yet, so ...
Edited: 15 Jan 2010, 9:52 a.m.
Posts: 850
Threads: 10
Joined: Mar 2009
I don't have a 32sii, but in this thead I noted that the 20S was faster than the 35s, for that particular implementation. I quite like the 20S, it was a nice machine for it's price/size, and the 99 merged program steps is about right to briefly implement repetative or iterative formulas. There seems to be nothing like it on the market today. For programability it's either a 35s or an overkill graphics calculator. (The Sharp EL-5250 is the only other non-graphics programmable that I know of, but is not available in much of Europe).
▼
Posts: 1,089
Threads: 32
Joined: Dec 2005
Casio has some programmables of which the fx-4500pa is an evergreen for good reasons. Not a bad calculator if you don't mind the entry system and hard to read keyboard legends.
▼
Posts: 850
Threads: 10
Joined: Mar 2009
Thanks, doing some more research I found Casio have more programmable models. the FX-50F+ which I've found on UK online stores and the FX-5800P which is not available in the UK, but in Germany and Switzerland for about the same price as a 35s (on the plus side it does seem to have connectivity options).
Edited: 5 Jan 2010, 10:04 a.m.
▼
Posts: 3,283
Threads: 104
Joined: Jul 2005
I have a fx-5800P in front of me. The connectivity is only between identical machines. The cable is a standard Casio connectivity cable but that does not mean that you can mix and match devices.
Still better than no connectivity at all.
▼
Posts: 850
Threads: 10
Joined: Mar 2009
Oh, I thought it might connect to a PC using a special cable like the 9850g. Too bad.
|