|
Archive:
Subtopics:
Comments disabled |
Wed, 25 Sep 2013
In which I revisit the pastimes of my misspent youth
I lost my original one somewhere along the way, and also the spare I had bought from a friend against the day when I lost the original, and I was glad to get another one, even though I didn't have any idea what I was going to do with it. My phone has a perfectly serviceable scientific calculator in it, a very HP-ish one called RealCalc. (It's nice, you should check it out.) The 15C was sufficiently popular that someone actually brought it back a couple of years ago, in a new and improved version, with the same interface but 21st-century technology, and I thought hard about getting one, but decided I couldn't justify spending that much money on something so useless, even if it was charming. Finding a cheap replacement was a delightful surprise. Then on Friday night I was sitting around thinking about which numbers n are such that !!10n^2+9!! a perfect square, and I couldn't think of any examples except for 0, 2, and 4. Normally I would just run and ask the computer, which would take about two minutes to write the program and one second to run it. But I was out in the courtyard, it was a really nice evening, my favorite time of the year, the fading light was beautiful, and I wasn't going to squander it by going inside to brute-force some number problem. But I did have the HP-15C in my pocket, and the HP-15C is programmable, by mid-1980s programmable calculator standards. That is to say, it is just barely programmable, but just barely is all you need to implement linear search for solutions of !!10n^2+9 = m^2!!. So I wrote the program and discovered, to my surprise, that I still remember many of the fussy details of how to program an HP-15C. For example, the SST button single-steps through the listing, in program mode, but single-steps the execution in run mode. And instead of using the special test 5 to see if the x and y registers are equal you might as well subtract them and use the x=0 test; it uses the same amount of program memory and you won't have to flip the calculator over to remember what test 5 is. And the x2 and INT() operations are on the blue shift key. Here's the program:
001 - 42,21,11 Label A: (subroutine)
002 - 43 11 x²
003 - 1
004 - 0 10
005 - 20 multiply
006 - 9 9
007 - 40 add
008 - 36 enter (dup)
009 - 11 √
010 - 36 enter (dup)
011 - 43 44 x ← int(x)
012 - 30 subtract
013 - 43 20 unless x=0:
014 - 31 STOP
015 - 43 32 return from subroutine
016 - 42,21,12 Label B:
017 - 40 +
018 - 45 0 load register 0
019 - 32 11 call A
020 - 2 2
021 - 44,40, 0 add to register 0
022 - 22 12 goto B
I see now that when I tested !!\sqrt{10n^2+9}!! for
integrality, I did it the wrong way. My method used four steps:
010 - 36 -- enter (dup)
011 - 43 44 -- x ← INT(x)
012 - 30 -- subtract
013 - 43 20 -- unless x=0: …
but it would have been better to just test the fractional part of the
value for zeroness:
42 44 -- x ← FRAC(x)
43 20 -- unless x=0: …
Saving two instructions might not seem like a big deal, but it takes
the calculator a significant amount of time to execute two
instructions. The original program takes 55.2 seconds to find
n=80; with the shorter code, it takes only 49.2 seconds, a 10%
improvement. And when your debugging tool can only display a single
line of numeric operation codes, you really want to keep the program
as simple as you can.Besides, stuff should be done right. That's why it's called "right". But I kind of wish I had that part of my brain back. Who knows what useful thing I would be able to remember if I wasn't wasting my precious few brain cells remembering that the back-step key ("BST") is on the blue shift, and that "42,21,12" is the code for "subroutine B starts here". Anyway, the program worked, once I had debugged it, and in short order (by 1986 standards) produced the solutions n=18, 80, 154, which was enough to get my phone to search the OEIS and find the rest of the sequence. The OEIS entry mentioned that the solutions have the generating function
$$\frac{2x^2(1+2x+9x^2+2x^3+x^4)}{1-38x^3+x^6}$$ and when I saw that !!38x^3!! in the denominator, I laughed, really loudly. My new neighbor was in her back yard, which adjoins the courtyard, and heard me, and said that if I was going to laugh like that I had to explain what was so funny. I said “Do you really want to know?” and she said yes, but I think she was mistaken.[ Addendum 20200204: Had I been doing this in the 1980s, I would have had to go into the house to check the OEIS, but I have wistfully gotten rid of my useless hardback copy, because these days I can do it from the courtyard on my phone. ] [Other articles in category /brain] permanent link |