Hi everybody, here we go (again):

Say you've just got that powerful, new HP calculator for your collection (say an HP33S

or some HP48/49 model) and you're itching to test it on some interesting problem.

Here's one of my own devising for you to try. Apart from being interesting in its own right (IMHO), it might actually be useful ! Consider for instance its use by someone teaching math to prepare interesting problems for his/her students (i.e.: K = 7.041776 anyone ? :-) Read on ...

**Before we begin ...**

We all know Pi is a *transcendental* number. By definition, this means Pi *cannot* be the root

of any polynomial equation with *integer* coefficients, whatever its degree (this is also

true of all other transcendental numbers such as e, sin(1), log(2), etc). In particular,

Pi cannot be a root of a cubic equation with integer coefficients, such as

A*x^3 + B*x^2 + C*x + D = 0where A,B,C,D are all of them integer. However, this doesn't preclude the fact that such an equation

might have a root which is as close an approximation to Pi as desired for sufficiently large A,B,C,D. And thus,

here is

**The challenge:**

*"Write a program for your preferred HP calculator to find the integer coefficients A,B,C,D of the cubic equation:
*

A*x^3 + B*x^2 + C*x + D = 0

*
which has a root that best approximates a given positive constant K (say, K = Pi), where the
coefficients are less or equal in absolute value to a maximum given integer value, M
(say, M = 9)."*

**Notes:**

Without loss of generality, the A coefficient will always be *positive*

(i.e: it goes from 1 to M, both included) while the B,C, and D coefficients can be

*either positive or negative* (i.e: they go from -M to +M, both included). Your

program must *input* K (say Pi), M (say 9) and a very loose initial interval for the

root (say [3.1, 3.2]) and must *output* the coefficients A,B,C,D of the "best"

equation, the value X of the root, and the absolute difference between the

root X and the given constant K.

For instance, given the inputs K=Pi, M=20, Interval= [3.1, 3.2] it might

output something like (not the best solution, of course):

A= 1, B= -10, C= 19, D= 8, X= 3.14162732179, DIF= 0.00003466820which means that the cubic equation x^3 - 10*x^2 + 19*x + 8 = 0 has a root

x= 3.14162732179, which differs from Pi by only 0.00003466820.

You are expected to deliver a general program, that will work for any positive constant K, maximum coefficient M and given initial interval [X1,X2], but for the purposes of testing the efficiency and accuracy of your solution you should try these two cases:

- Case 1: constant K = Pi, Max. coefficient M = 9, initial interval [3.1, 3.2]
- Case 2: same but with Max. coefficient M = 20

**Hints:**

- Absolutely
*refrain*from using a PC. You'll learn*nothing*about writing and optimizing

programs for your HP calculator and will ruin the pleasure of seeing your efforts

and ingenuity succeed with your little HP machine. This is intended for*real*programmers using*real*HP calcs, not the "brute-force-using-a-zillion-Ghz-PC" kind. - Though most any HP model can be used to successfully solve this challenge, it is advisable

that you use a suitably fast HP calculator, say any model using a Saturn CPU (HP33S, HP32S,

HP32SII, HP42S, HP48/49, HP-71B, etc), in order to attain reasonable running times. - Even so, you'll need to exercise your ingenuity to achieve bearable running times.

A brute-force approach is doomed to failure. Consider this:- for M = 9, your program will have to choose among no less than

*61,731 possible cubic equations*, from (1,-9,-9-,9) to (9,9,9,9)- for M=20, your program will have to choose among

*more than 1 million possible equations*,

(namely 1,378,420) from (1,-20,-20,-20) to (20,20,20,20)

In a few days, I'll give a solution for the HP-71B, which will be a 9-line program

(300+ bytes), with the following running times:

- For the case constant K = Pi, Max. coefficient M = 9, initial interval [3.1, 3.2],

it takes*7 min. 16 seconds*to find the solution among the 61,731 cubic equations

possible, output it*and*stop.

- For the case constant K = Pi, Max. coefficient M = 20, initial interval [3.1, 3.2],

it takes*3 hour 4 min.*to find the solution among the 1,378,420 cubic equations

possible, output it and stop.

Now's your turn. Just put that brand new shiny HP33S, that wonderful classical HP42S, that ultrapowerful HP49, or that venerable HP-71B to the task, *plus* your ingenuity and RPN/RPL/BASIC/FORTH/Assembler programming skills of course. After all, if the good old HP-71B can do it in 3 hours using BASIC,

what incredible times will you be able to achieve with much faster machines using RPN/RPL, say ? Emulators very

welcome too, of course.

Best regards from V.