▼
Posts: 376
Threads: 35
Joined: Jul 2007
Is there programmatic way to calculate the base of natural logarithms (or Euler Number) if the function of "e" were not available. I know what the formula is for "e", but how would one pro grammatically find this on say a 35s, or other similar calculator?
Edited: 13 Aug 2007, 7:37 p.m.
▼
Posts: 58
Threads: 6
Joined: Jul 2007
Does the 35s not have e^x?
You could use a series expansion.
Posts: 320
Threads: 59
Joined: Dec 2006
Do you want to have unlimited accuracy? or is this close enough?
848456353
 = 2.71828182845904523(4757)
312129649
That's close enough for most calculations.
Or use a simple loop to find the sum of 1/n! as n goes from 0, 20. This gives 2.7182818284590452353(39784).
Edited: 13 Aug 2007, 8:41 p.m.
▼
Posts: 169
Threads: 12
Joined: Aug 2007
9242691/3400196 (within 7 digits, error < 9.4e14)
this is also enough for 35s.
49171/18089 (within 16 bit, error < 1.02e10)
may be used in a micro controller.
Posts: 1,477
Threads: 71
Joined: Jan 2005
This is a pretty simple program to write, just a few lines. You can also compute it in the equation solver in several different ways. But it doesn't need to be computed at all on this machine, it's now in the constants menu.
▼
Posts: 320
Threads: 59
Joined: Dec 2006
Here's the problem I have with the programming required of some calculators. To do a loop from 1 to 20 of 1/n! stored in a register, this is the best I can come up with ...
S001 LBL S
S002 1.02
S003 STO I
S004 ISG I
S005 GTO S007
S006 RTN
S007 RCL I
S008 INTG
S009 !
S010 1/x
S011 STO+ E
S012 GTO S004
This seems like a rediculous number of steps for a simple loop.
CHUCK
▼
Posts: 3,229
Threads: 42
Joined: Jul 2006
One step less by running the loop backwards.
Also better numerically.
E001 LBL E
E002 20
E003 STO I
E004 1
E005 RCL I
E006 !
E007 1/x
E008 +
E009 DSE I
E010 GTO E005
E011 RTN
 Pauli
▼
Posts: 320
Threads: 59
Joined: Dec 2006
I now see that the STO+ was an unecessary step (since the values remain on the stack), but why would backwards be better numerically? Non comprendo.
▼
Posts: 3,229
Threads: 42
Joined: Jul 2006
It is more stable backwards because you're adding like sized terms the whole time and generally maintaining full precision as well.
Going forwards starts with a 1 term and by the time you're near the end, most of the significant digits are beyond the precision of the sum.
The difference will likely be at most a digit or two in the last place but it doesn't take any extra effort to work from the small terms to the large.
 Pauli
Posts: 735
Threads: 34
Joined: May 2007
Use Horner's Method (p. 1326 in the User's Guide) to avoid factorial:
E001 LBL E
E002 STO I
E003 1
E004 RCL/ I
E005 1
E006 +
E007 DSE I
E008 GTO E004
E009 RTN
20 XEQ E001
Posts: 735
Threads: 34
Joined: May 2007
Quote:
You can also compute it in the equation solver in several different ways.
I've tried to solve the following equation:
ABS(E^(Pi*i)+1)=0
I would have expected to get:
NO ROOT FND
Instead I got:
INVALID y^{x}
Any ideas why?
It seems that somehow E becomes 0, though this case (i.e. 0 with complex exponent) isn't mentioned in the user's guide as a possible reason for that message.
What a pity you don't get more information, or is there a way to find out what was the last value of E in case of an error?
However it works if 0 is replaced in the equation by 1E11.
Posts: 376
Threads: 35
Joined: Jul 2007
I know it is on calculator, but I just curious how the program would be written.
Posts: 735
Threads: 34
Joined: May 2007
On the 35s:
 use the constants menu
 use the solver with LN(X) = 1
 iterate the following steps a few times with initial value 1:
ENTER
LN
2
x<>y

*
 calculate (1 + 1E6)^1E6
 SINH(1)+COSH(1)
 ...
Just a few ideas.
Edited: 14 Aug 2007, 3:03 a.m.
Posts: 727
Threads: 43
Joined: Jul 2005
Erm, I'm not sure if I understand what you're asking here. You say that you know the formula for e, but you can't figure out how to write a program to compute that value?
e = 1 + 1/1 + 1/(1*2) + 1/(1*2*3) + 1/(1*2*3*4) + 1/(1*2*3*4*5) + ...
Hint: if you number the terms like 0, 1, 2, 3, etc., then for all terms numbered 1 and greater, term n is a factor n smaller than the one before. Just keep summing until adding a term no longer changes your result; thanks to the limited precision of most calculators, that won't take long.
If you're going to ask for an actual program, I'm going to start suspecting you're a student asking us to do your homework. ;)
 Thomas
▼
Posts: 376
Threads: 35
Joined: Jul 2007
But formula is lim n > infinity (1+1/n)^n. What I don't understand is how you deal with infinity. I guess you could loop a couple hundred times to deliver accuracy, but how was this calculated in past, when e not available.
I guess reason I ask is I try and better understand programming on HP calculator, so I thought this would be a good test to see how something like infinity be handled.
▼
Posts: 727
Threads: 43
Joined: Jul 2005
Dealing with infinity can be tricky, and there is no one answer for all situations. In the case of the series for e, the key insight is that the terms get progressively smaller as n increases, and that in fact, they shrink so quickly that you only need to sum a few in order to reach maximum precision. 1/16! = 4.78e14, which is too small to affect the value of e when working with 12digit precision  so after summing only 16 terms, you're done. If you're working with higher precision, you'll need more terms, of course.
You can work out in advance when the terms will become too small to affect the result any further, or you can simply compare each iteration's result to the previous one, and terminate the loop when there is no further change. And if you want the best possible accuracy, you can sum the series from smallest terms to largest (that requires working out which is the smallest term in advance), to minimize the effect of roundoff error on the final result.
Note that the series for e (or generally speaking, for e^x, and the related series for sin and cos) have the nice property that the terms shrink very quickly, but this is not true for all series, like the notoriously useless tan(x) = 1  x/3 + x/5  x/7... In such cases you'll have to look for a more clever approach.
 Thomas
▼
Posts: 376
Threads: 35
Joined: Jul 2007
Okay, but how you write program to do this? I no student in school, but I am student of life, and want to learn how to do something like this.
I try some programming but I still very green as you say in America, and still trying to grasp concept of RPN programming.
If this was in C, cobol, or assembler, I would know what to do, but I baffled with programming on 35s. Maybe it too simple and that my issue.
▼
Posts: 1,392
Threads: 142
Joined: Jun 2007
Vincze, you need to get the museum DVD. It has the manuals of almost all HP calculators, and you need to read the programming sections of those manuals. That will teach you how to program in RPN.
▼
Posts: 376
Threads: 35
Joined: Jul 2007
But I have HP35s and its manual, but it not explain the programming and looping and loop testing, etc. If I want to loop something say 20 times, how would I control that in 35s and take final value and display? It talk about very little in manual. I have friend who has older version of CD's from here. What would be good manual to look at that explain this better than current 35s manual.
▼
Posts: 1,392
Threads: 142
Joined: Jun 2007
Vincze, how can you say the 35s manual does not discuss programming and looping? Part 2 of the manual is about nothing but programming. Loops are described on pages 1416 to 1418. You really need to read these sections and play around with it.
Posts: 239
Threads: 55
Joined: Sep 2006
You also could use this:
(IDIV(I,18)1)/A = (1IDIV(I,18))/A + 0*(E+1/I!STO E) + 0*(I+1STO I)
Solve for A
I=0 R/S
E=0 R/S
RCL E
or still:
(IDIV(I,18)1)/A = (1IDIV(I,18))/A + 0*(E/(20I)+1STO E) + 0*(I+1STO I)
Solve for A
I=0 R/S
E=1 R/S
RCL E
Just amazing! enjoy.
Miguel
