Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

I'm thinking of making a table of logarithms ranging from 100-999 with 5 significant digits. By pen and paper that is. I'm doing this old school.

What first came to mind was to use $\log(ab) = \log(a) + \log(b)$ for reduction.
And then use the taylor series for $\log(1-x)$ when $-1 < x \leq 1$ But convergence is rather slow on this one.

Can you come up with a better method?

share|improve this question
    
Look at this thread here for some tricks that reduce the work and relevant background information. Essentially you don't want to use a single power series but do most of the work by using appropriate interpolations. –  t.b. Sep 1 '11 at 22:11
    
The Feynman Lectures on Physics Vol1 Ch22 has the same ethos as the question and some good insight too. –  Mark Bennet Sep 1 '11 at 22:44
1  
You can find some actual calculations in this column: maa.org/editorial/euler/… (it has an iterative method for base-10 logs, and half-way down page 3 it uses (a friendlier version of) the method in @Iasafro's post). Note that you need only use the series for reciprocals of integers since you can piece everything else together from those (and some ingenuity on your part). I also want to add that it's nice seeing someone else who is interested in this stuff (whenever I feel my arithmetic skills are declining I add to my log tables for practice). –  Riley E Sep 2 '11 at 20:21
2  
You are seriously doing this for fun? I know that my parents had to use logarithm tables when there were no affordable calculators. Why would you want to do this by hand today? –  Raphael Sep 2 '11 at 21:24
1  
@Raphael: While it's true that calculating things by hand is not that efficient when you want results, it is good practice at arithmetic. From my personal experience, as well as observing others, it seems that the jokes about basic skills (arithmetic, trig, calculus, etc.) degrading the higher one goes in mathematics are all too true. To counteract this, whenever I notice I'm getting sloppy with numbers I just pull out my table and add to it :) A slight digression: Another use for calculating things by hand (well, maybe not always by hand) is to help calculus students understand what.. –  Riley E Sep 3 '11 at 4:58

5 Answers 5

According to Wikipedia, http://en.wikipedia.org/wiki/Logarithm#Power_series, you can try $$\ln(z)=2\sum_{n=0}^\infty\,\frac{1}{2n+1}\left(\frac{z-1}{z+1}\right)^{2n+1}$$ And using that convergence is quickler for $z$ near to $1$, according to wikipedia for $z=1.5$ the first three terms of the series give an error of about $3\cdot 10^{-6}$.

share|improve this answer

For $1 \le x \le 2$, $$\begin{eqnarray*} \ln(x) &\approx - 1.941064448+ \left( 3.529305040+ \left( - 2.461222169+ \left( \right.\right.\right.\cr & \left.\left.\left. 1.130626210+ \left( - 0.2887399591+ 0.03110401824\,x \right) x \right) x \right) x \right) x \end{eqnarray*}$$ with error less than $10^{-5}$. For $2^n \le x \le 2^{n+1}$, $\ln(x) = n \ln(2) + \ln(x/2^n)$.

share|improve this answer
    
By any chance, is this an economized Chebyshev approximation? –  J. M. Sep 2 '11 at 7:19
    
No, it's the best approximation in $L^\infty$ norm by polynomials of degree $\le 5$, computed by Maple's numapprox[minimax] procedure using the Remez algorithm. –  Robert Israel Sep 2 '11 at 17:33

EDIT: This is the short, streamlined version. My original answer is below, and the motivation, background, and error discussion can be found there.

  1. Find approximations for $\ln(1.00)$ to $\ln(2.00)$ iterating the argument by $0.01$. $$\ln(1.00)=0$$ $$\ln(x+0.01)\approx\ln(x)+\frac{1}{600}\left(\frac{1}{x}+\frac{4}{x+0.005}+\frac{1}{x+0.01}\right)\qquad(1)$$
  2. Find approximations for $\ln(2.01)$ to $\ln(3.00)$. If $\ln(x/2)$ is already tabulated, $$\ln(x)=\ln(x/2)+\ln(2.00)$$ Otherwise, use equation $(1)$.
  3. Find approximations for $\ln(3.01)$ to $\ln(5.00)$. If $\ln(x/2)$ or $\ln(x/3)$ is already tabulated, $$\ln(x)=\ln(x/2)+\ln(2.00)\qquad\textrm{or}\qquad\ln(x)=\ln(x/3)+\ln(3.00)$$ Otherwise, use equation $(1)$.
  4. Find approximations for $\ln(5.01)$ to $\ln(7.00)$. If $\ln(x/2)$, $\ln(x/3)$, or $\ln(x/5)$ is already tabulated, $$\ln(x)=\ln(x/2)+\ln(2.00)\qquad\textrm{or}\qquad\ln(x)=\ln(x/3)+\ln(3.00)$$ $$\textrm{or}\qquad\ln(x)=\ln(x/5)+\ln(5.00)$$Otherwise, use equation $(1)$.
  5. Find approximations for $\ln(7.01)$ to $\ln(10.00)$. If $\ln(x/2)$, $\ln(x/3)$, $\ln(x/5)$, or $\ln(x/7)$ is already tabulated, $$\ln(x)=\ln(x/2)+\ln(2.00)\qquad\textrm{or}\qquad\ln(x)=\ln(x/3)+\ln(3.00)$$ $$\textrm{or}\qquad\ln(x)=\ln(x/5)+\ln(5.00)\qquad\textrm{or}\qquad\ln(x)=\ln(x/7)+\ln(7.00)$$ Otherwise, use equation $(1)$.
  6. Now approximations for $\ln(1.00)$ to $\ln(10.00)$ are tabulated. Add $2\ln(10.00)$ to obtain a table of $\ln(100), \ln(101), \ldots, \ln(1000)$. Personally, I would leave the table with arguments from $1.00$ to $10.00$ and instruct the reader to add $\ln(10.00)$ as necessary.

This method uses equation $(1)$ roughly $100+50+33+33+27+27+23+23+23\approx340$ times. That means that you will do about $3(340)=1360$ divisions by numbers with at most four significant figures. You will divide by $600$ (comparatively simple) $340$ times. When you use equation $(1)$, you do $3$ additions, totalling about $1020$ additions. When you do not use equation $(1)$, you do addition once, and this happens about $900-340=560$ times. All together that's:

  • $1360$ divisions by numbers with at most 4 significant digits
  • $340$ divisions by $600$
  • $1580$ additions
  • no time-consuming multiplications or raising to powers, as most other methods involve

I think this is excellent considering that you will be producing $900$ numbers to five decimals of accuracy.


Original posted answer:

Here's an idea that has nothing to do with power series. First, read up on the Runge-Kutta method for approximating solutions to differential equations at http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods. Just stick to the "common fourth-order" method. Most introductory differential equations courses cover Euler's method, which is a great concept, but usually impractical for its slowness. Runge-Kutta works a lot faster.

$y=\ln(x)$ is the solution to the differential equation $y'=\frac{1}{x}$ with initial condition $y(1)=0$. Apply Runge-Kutta with a step size of $0.01$ and iterate nine hundred times from $1.00$ up to $10.00$. You'll have approximate values for $\ln(1.01)$ up to $\ln(10.00)$. Then you can add the approximation for $\ln(10.00)$ (twice) to get approximations for $\ln(100)$ to $\ln(1000)$.

Error:

I do not know of any theorems for bounding the error with this method, but errors are usually very small in practice. I used Excel to do all of this, and the error on the final approximation for $\ln(10.00)$ was just less than $2.1\times10^{-11}$. If you did all of this by hand, then used some other method to find $\ln(10.00)$ with very high known precision, you could establish a bound on the error for $\ln(10.00)$. Then the monotonicity of $\frac{1}{x}$ would imply that all the errors on the intermediate steps were even smaller.

Complexity:

Given the specifics of this problem, each iteration will require you to do three decimal divisions by numbers that have at most four significant digits. (Note that since the differential equation is pure-time, $k2=k3$.) Each iteration will also have two doublings, several additions, and one division by 6, but the three decimal divisions will take most of your time. Also, each of these three quotients only gets used later in additions, doublings, and division by $6$, so I would bet that you would be safe recording only 7 decimals for each quotient. My feeling is that this will give you the results that you want much quicker than most methods based on power series. Just like this method, those require several divisions at each step. But power series methods also require raising to powers, and this method does not.

Improved Speed

To cut the computation time roughly in half, you could use some other method to find a decimal for $\ln(2)$ to high accuracy, and add use $\ln(2x)=\ln(x)+\ln(2)$. Specifically, after running Runge-Kutta ninety times up through $2.01$, you could approximate $\ln(2.02)$ with the approximations you have for $\ln(1.01)$ and $\ln(2)$. Alternate back to RK for $\ln(2.03)$, and continue alternating the methods. This would drop you from $900$ RK iterations down to $500$. Adding this modification to my Excel spreadsheet brought the final error on $\ln(10.00)$ up to a perfectly acceptable $7.1\times10^{-11}$.

share|improve this answer
    
The "classical" version is good, though one might want to consider Gill's formulation to save on the number of quantities one must recall per step. –  J. M. Sep 2 '11 at 19:04
    
@J.M.: I cannot see the article, but can you clarify what you mean? The only quantity that needs to be recalled to find, say $\ln(2.57)$ is $\ln(2.56)$. And the OP wants to have $\ln(2.56)$ recorded anyways as part of the final table. (That is, after adding $2\ln(10)$.) Is Gill's formulation trying to get to the end (that is, $\ln(10.00)$) with fewer steps in between? The OP wants a table of $900$ numbers no matter what the method. –  alex.jordan Sep 2 '11 at 20:40

If you want to make a table of natural logarithms, you could do it fairly effectively using Newton Raphson. For each x ∈ [100,999], choose an initial y0 ∈ (4.6, 6.9) to taste, and then iterate: $$ y_{j+1} \;\;=\;\; y_j - \left[\dfrac{\exp(y_j) - x}{\exp(y_j)}\right] \;\;=\;\; y_j + x \exp(-y_j) - 1. $$ The Taylor series for exp(−yj) should converge quickly, unlike that of ln(1 − yj). For base 10 logarithms, you can do the conversion by dividing your natural logarithms by ln(10), which you can also find quickly by the above method.

share|improve this answer
    
If the range is from a particular number to another number 10 times as big, then it doesn't make much sense unless they're base-10 logarithms. –  Michael Hardy Sep 1 '11 at 22:46
    
@Michael Hardy: good point; but he can convert by dividing by ln(10) throughout, which is similar to a computation he would have to do with a direct Talyor series computation anyhow. –  Niel de Beaudrap Sep 1 '11 at 22:50

Another way, appropriate for making a table, is to start with $\ln(100) = 4.605170186$, and then for each $n$, $\ln(n+1) \approx \ln(n) + \frac{1}{n} - \frac{1}{2n^2} + \frac{1}{3n^3}$. The accumulated truncation error (not counting roundoff) will always be less than $10^{-7}$.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.