# Taylor's series

A well-behaved function can be expanded into a power series. This means that for all non-negative integers ${\displaystyle k}$ there are real numbers ${\displaystyle a_{k}}$ such that

${\displaystyle f(x)=\sum _{k=0}^{\infty }a_{k}x^{k}=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+a_{4}x^{4}+\cdots }$

Let us calculate the first four derivatives using ${\displaystyle (x^{n})'=n\,x^{n-1}}$:

${\displaystyle f'(x)=a_{1}+2\,a_{2}x+3\,a_{3}x^{2}+4\,a_{4}x^{3}+5\,a_{5}x^{4}+\cdots }$
${\displaystyle f''(x)=2\,a_{2}+2\cdot 3\,a_{3}x+3\cdot 4\,a_{4}x^{2}+4\cdot 5\,a_{5}x^{3}+\cdots }$
${\displaystyle f'''(x)=2\cdot 3\,a_{3}+2\cdot 3\cdot 4\,a_{4}x+3\cdot 4\cdot 5\,a_{5}x^{2}+\cdots }$
${\displaystyle f''''(x)=2\cdot 3\cdot 4\,a_{4}+2\cdot 3\cdot 4\cdot 5\,a_{5}x+\cdots }$

Setting ${\displaystyle x}$ equal to zero, we obtain

${\displaystyle f(0)=a_{0},\quad f'(0)=a_{1},\quad f''(0)=2\,a_{2},\quad f'''(0)=2\times 3\,a_{3},\quad f''''(0)=2\times 3\times 4\,a_{4}.}$

Let us write ${\displaystyle f^{(n)}(x)}$ for the ${\displaystyle n}$-th derivative of ${\displaystyle f(x).}$ We also write ${\displaystyle f^{(0)}(x)=f(x)}$ — think of ${\displaystyle f(x)}$ as the "zeroth derivative" of ${\displaystyle f(x).}$ We thus arrive at the general result ${\displaystyle f^{(k)}(0)=k!\,a_{k},}$ where the factorial ${\displaystyle k!}$ is defined as equal to 1 for ${\displaystyle k=0}$ and ${\displaystyle k=1}$ and as the product of all natural numbers ${\displaystyle n\leq k}$ for ${\displaystyle k>1.}$ Expressing the coefficients ${\displaystyle a_{k}}$ in terms of the derivatives of ${\displaystyle f(x)}$ at ${\displaystyle x=0,}$ we obtain

 ${\displaystyle f(x)=\sum _{k=0}^{\infty }{f^{(k)}(0) \over k!}x^{k}=f(0)+f'(0)x+f''(0){x^{2} \over 2!}+f'''(0){x^{3} \over 3!}+\cdots }$

This is the Taylor series for ${\displaystyle f(x).}$

A remarkable result: if you know the value of a well-behaved function ${\displaystyle f(x)}$ and the values of all of its derivatives at the single point ${\displaystyle x=0}$ then you know ${\displaystyle f(x)}$ at all points ${\displaystyle x.}$ Besides, there is nothing special about ${\displaystyle x=0,}$ so ${\displaystyle f(x)}$ is also determined by its value and the values of its derivatives at any other point ${\displaystyle x_{0}}$:

 ${\displaystyle f(x)=\sum _{k=0}^{\infty }{f^{(k)}(x_{0}) \over k!}(x-x_{0})^{k}.}$

## Examples

### cos(x)

${\displaystyle f(x)=\cos(x);\ f(0)=\cos(0)=1}$

${\displaystyle f'(x)=-\sin(x);\ f'(0)=-\sin(0)=0}$

${\displaystyle f''(x)=-\cos(x);\ f''(0)=-\cos(0)=-1}$

${\displaystyle f'''(x)=\sin(x);\ f'''(0)=\sin(0)=0}$

${\displaystyle f''''(x)=\cos(x);\ f''''(0)=\cos(0)=1}$

${\displaystyle a_{0}=f(0)=1}$

${\displaystyle a_{1}=f'(0)=0}$

${\displaystyle a_{2}={\frac {f''(0)}{2}}={\frac {-1}{2!}}}$

${\displaystyle a_{3}={\frac {f'''(0)}{2*3}}={\frac {0}{3!}}=0}$

${\displaystyle a_{4}={\frac {f''''(0)}{2*3*4}}={\frac {1}{4!}}}$

${\displaystyle \cos(x)=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+a_{4}x^{4}+\cdots }$  ${\displaystyle =1+(0)x+{\frac {-1}{2}}x^{2}+0x+{\frac {1}{4!}}x^{4}+\cdots }$  ${\displaystyle =1-{\frac {x^{2}}{2!}}+{\frac {x^{4}}{4!}}-{\frac {x^{6}}{6!}}+{\frac {x^{8}}{8!}}-\cdots }$

 Some basic checking: ${\displaystyle \cos(0)=1-{\frac {0^{2}}{2!}}+{\frac {0^{4}}{4!}}-{\frac {0^{6}}{6!}}+{\frac {0^{8}}{8!}}-\cdots =1}$  ${\displaystyle \cos(-x)=1-{\frac {(-x)^{2}}{2!}}+{\frac {(-x)^{4}}{4!}}-{\frac {(-x)^{6}}{6!}}+{\frac {(-x)^{8}}{8!}}-\cdots }$  ${\displaystyle =1-{\frac {x^{2}}{2!}}+{\frac {x^{4}}{4!}}-{\frac {x^{6}}{6!}}+{\frac {x^{8}}{8!}}-\cdots =\cos(x)}$  ${\displaystyle {\frac {d(\cos(x))}{dx}}=0-{\frac {2x}{2!}}+{\frac {4x^{3}}{4!}}-{\frac {6x^{5}}{6!}}+{\frac {8x^{7}}{8!}}\cdots }$  ${\displaystyle =-x+{\frac {x^{3}}{3!}}-{\frac {x^{5}}{5!}}+{\frac {x^{7}}{7!}}\cdots }$  ${\displaystyle =-\sin(x)}$  ${\displaystyle \sin(x)=x-{\frac {x^{3}}{3!}}+{\frac {x^{5}}{5!}}-{\frac {x^{7}}{7!}}+\cdots }$  ${\displaystyle {\frac {d(\sin(x))}{dx}}=1-{\frac {3x^{2}}{3!}}+{\frac {5x^{4}}{5!}}-{\frac {7x^{6}}{7!}}+\cdots }$  ${\displaystyle =1-{\frac {x^{2}}{2!}}+{\frac {x^{4}}{4!}}-{\frac {x^{6}}{6!}}+\cdots }$  ${\displaystyle =\cos(x)}$

### arctan(x)

${\displaystyle y=\arctan(x)}$

${\displaystyle x=\tan(y)}$

${\displaystyle {\frac {dx}{dy}}=\sec ^{2}(y)}$

${\displaystyle y'={\frac {dy}{dx}}=\cos ^{2}(y)={\frac {1}{1+x^{2}}}}$ . See ${\displaystyle \cos(\theta )}$ .

#### Second derivative y″

 ${\displaystyle (1+x^{2})y'=1}$  ${\displaystyle (1+x^{2})y''+y'(2x)=0}$  ${\displaystyle y''={\frac {-y'(2x)}{1+x^{2}}}}$  ${\displaystyle ={\frac {-2x}{1+x^{2}}}.y'}$  ${\displaystyle ={\frac {-2x}{1+x^{2}}}.{\frac {1}{1+x^{2}}}}$  ${\displaystyle ={\frac {-2x}{(1+x^{2})^{2}}}}$

#### Third derivative y¹¹¹

 ${\displaystyle (1+2x^{2}+x^{4})y''=-2x}$  ${\displaystyle (1+2x^{2}+x^{4})y'''+y''(4x+4x^{3})=-2}$  ${\displaystyle y'''={\frac {-2-y''(4x+4x^{3})}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {-2-y''4x(1+x^{2})}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {-2-{\frac {-2x}{(1+x^{2})^{2}}}.4x(1+x^{2})}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {-2-{\frac {-2x}{1+x^{2}}}.4x}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {-2+{\frac {8x^{2}}{1+x^{2}}}}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {\frac {-2(1+x^{2})+8x^{2}}{1+x^{2}}}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {\frac {-2-2x^{2}+8x^{2}}{1+x^{2}}}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {\frac {-2+6x^{2}}{1+x^{2}}}{1+2x^{2}+x^{4}}}}$  ${\displaystyle ={\frac {-2+6x^{2}}{(1+2x^{2}+x^{4})(1+x^{2})}}}$  ${\displaystyle ={\frac {-2+6x^{2}}{(1+x^{2})^{3}}}}$

#### (continued)

If you continue to calculate derivatives, you will produce the following sequence:

${\displaystyle f(0)=0}$

${\displaystyle f'(0)=1}$

${\displaystyle f''(0)=0}$

${\displaystyle f'''(0)=-2=-(2!)}$

${\displaystyle f''''(0)=0}$

${\displaystyle f^{v}(0)=24=4!}$

${\displaystyle f^{vi}(0)=0}$

${\displaystyle f^{vii}(0)=-720=-(6!)}$

${\displaystyle f^{viii}(0)=0}$

${\displaystyle f^{viiii}(0)=40320=8!}$

${\displaystyle f^{x}(0)=0}$

${\displaystyle f^{xi}(0)=-3628800=-(10!)}$

${\displaystyle f^{xii}(0)=0}$

${\displaystyle f^{xiii}(0)=479001600=12!}$

${\displaystyle \arctan(x)=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+a_{4}x^{4}+\cdots }$

${\displaystyle =0+(1)x+(0)x^{2}+{\frac {-(2!)}{3!}}x^{3}+(0)x^{4}+{\frac {4!}{5!}}x^{5}+(0)x^{6}+{\frac {-(6!)}{7!}}x^{7}+(0)x^{8}+{\frac {8!}{9!}}x^{9}+(0)x^{10}+{\frac {-(10!)}{11!}}x^{11}+\cdots }$

${\displaystyle =x-{\frac {1}{3}}x^{3}+{\frac {1}{5}}x^{5}-{\frac {1}{7}}x^{7}+{\frac {1}{9}}x^{9}-{\frac {1}{11}}x^{11}+\cdots }$

 Some basic checking: ${\displaystyle \arctan(0)=0}$  ${\displaystyle \arctan(-x)=-\arctan(x).}$  ${\displaystyle {\frac {d(\arctan(x))}{dx}}}$  ${\displaystyle =1-{\frac {3x^{2}}{3}}+{\frac {5x^{4}}{5}}-{\frac {7x^{6}}{7}}+{\frac {9x^{8}}{9}}-{\frac {11x^{10}}{11}}+\cdots }$  ${\displaystyle =1-x^{2}+x^{4}-x^{6}+x^{8}-x^{10}+\cdots }$  Also, ${\displaystyle {\frac {d(\arctan(x))}{dx}}={\frac {1}{1+x^{2}}}}$  Show that ${\displaystyle {\frac {1}{1+x^{2}}}}$  ${\displaystyle =1-x^{2}+x^{4}-x^{6}+x^{8}-x^{10}+\cdots }$  or that ${\displaystyle 1=(1+x^{2})(1-x^{2}+x^{4}-x^{6}+x^{8}-x^{10}+\cdots )}$  ${\displaystyle (1+x^{2})(1-x^{2}+x^{4}-x^{6}+x^{8}-x^{10}+\cdots )}$  ${\displaystyle =1(1-x^{2}+x^{4}-x^{6}+x^{8}-x^{10}+\cdots )+x^{2}(1-x^{2}+x^{4}-x^{6}+x^{8}-x^{10}+\cdots )}$  ${\displaystyle =1-x^{2}+x^{4}-x^{6}+x^{8}-x^{10}+\cdots +x^{2}-x^{4}+x^{6}-x^{8}+x^{10}-x^{12}+\cdots }$  ${\displaystyle =1\ \cdots \ \pm \ x^{2n}}$  If abs${\displaystyle (x)<1,\ \lim _{n\rightarrow \infty }x^{2n}=0.}$
 Figure 1: Graph of ${\displaystyle t(x),}$  Taylor series representing ${\displaystyle \arctan(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 0.}$  In the diagram to the right, ${\displaystyle t(x)}$  is the Taylor series representing ${\displaystyle \arctan(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 0.}$  In the box above the proof that ${\displaystyle t(x)}$  is an accurate representation of ${\displaystyle \arctan(x)}$  is valid for abs${\displaystyle (x)<1.}$  When abs${\displaystyle (x)>1,}$  the diagram vividly illustrates that the series rapidly diverges. To be accurate, the line ${\displaystyle y={\frac {\pi }{4}}}$  should be ${\displaystyle y={\frac {\pi }{4}}}$  rad or ${\displaystyle y={\frac {\pi }{4}}^{c}}$  meaning ${\displaystyle y={\frac {\pi }{4}}}$  radians. In theoretical work a value such as ${\displaystyle {\frac {\pi }{4}}}$  is understood to be ${\displaystyle {\frac {\pi }{4}}}$  radians or ${\displaystyle 45^{\circ }}$  meaning ${\displaystyle 45}$  degrees.

#### In practice

The expansion of ${\displaystyle \arctan(x)}$  above is theoretically valid for ${\displaystyle |x|<1.}$  However, if ${\displaystyle |x|}$  is close to ${\displaystyle 1,}$  the calculation of ${\displaystyle \arctan(x)}$  will take forever.

This section uses ${\displaystyle x_{0}}$  so that ${\displaystyle |x-x_{0}|}$  is small enough to make time of calculation acceptable.

Let ${\displaystyle \theta =36{\tfrac {3}{4}}^{\circ }.}$  To calculate ${\displaystyle \tan(\theta ):}$

${\displaystyle \tan {\frac {11\pi }{60}}=\tan 33^{\circ }={\tfrac {1}{4}}\left[2-\left(2-{\sqrt {3}}\right)\left(3+{\sqrt {5}}\right)\right]\left[2+{\sqrt {2\left(5-{\sqrt {5}}\right)}}\,\right]\,}$

${\displaystyle \tan(147^{\circ })=-\tan(33^{\circ })}$

Using the half-angle formula ${\displaystyle \tan({\tfrac {\theta }{2}})=\csc(\theta )-\cot(\theta ),}$

calculate ${\displaystyle \tan(73{\tfrac {1}{2}})=\tan({\tfrac {147}{2}})}$  and ${\displaystyle \tan(36{\tfrac {3}{4}})=\tan({\tfrac {73{\tfrac {1}{2}}}{2}})}$

${\displaystyle \theta =36{\tfrac {3}{4}}^{\circ }.\ x_{0}=\tan(\theta )=0.7467354177837216717375001402.}$

${\displaystyle f(x_{0})={\frac {36{\tfrac {3}{4}}\pi }{180}}=0.6414085001079161195194563572.}$

This value ${\displaystyle (36{\tfrac {3}{4}}^{\circ })}$  was chosen for ${\displaystyle \theta }$  because ${\displaystyle x_{0}=\tan(\theta )}$  is close to ${\displaystyle 0.75.}$  For ${\displaystyle 1\geq x\geq 0.5,\ |x-x_{0}|\leq 0.25}$  approx.

${\displaystyle 0.25^{50}=7.888609052210118e-31.}$  If ${\displaystyle |x-x_{0}|==0.25,}$  the code below is accurate to ${\displaystyle 30}$  places of decimals.

This section uses the whole sequence of derivatives:

${\displaystyle y000=\arctan(x)}$  where ${\displaystyle y000=y^{(0)}=y}$

${\displaystyle y001={\frac {1}{U}}}$  where ${\displaystyle U=1+x^{2},\ y001=y^{(1)}=y'}$

${\displaystyle y002=-{\frac {(2)*(x)*(y001)}{U}}}$  where ${\displaystyle y002=y^{(2)}=y''}$

${\displaystyle y003=-{\frac {(4)*(x)*(y002)+(2)*(y001)}{U}}}$  where ${\displaystyle y003=y^{(3)}=y'''}$  and so on.

${\displaystyle y004=-{\frac {(6)*(x)*(y003)+(6)*(y002)}{U}}}$

${\displaystyle y005=-{\frac {(8)*(x)*(y004)+(12)*(y003)}{U}}}$

${\displaystyle y006=-{\frac {(10)*(x)*(y005)+(20)*(y004)}{U}}}$

${\displaystyle y007=-{\frac {(12)*(x)*(y006)+(30)*(y005)}{U}}}$

${\displaystyle y008=-{\frac {(14)*(x)*(y007)+(42)*(y006)}{U}}}$

${\displaystyle y009=-{\frac {(16)*(x)*(y008)+(56)*(y007)}{U}}}$

${\displaystyle y010=-{\frac {(18)*(x)*(y009)+(72)*(y008)}{U}}}$

${\displaystyle \cdots }$

${\displaystyle y050=-{\frac {(98)*(x)*(y049)+(2352)*(y048)}{U}}}$

Using ${\displaystyle f(x)=f(x_{0})(x-x_{0})^{0}+f'(x_{0})(x-x_{0})^{1}+{\frac {f''(x_{0})}{2}}(x-x_{0})^{2}+{\frac {f'''(x_{0})}{2\cdot 3}}(x-x_{0})^{3}+\cdots }$

then ${\displaystyle f(x)=y000+y001(x-x_{0})+{\frac {y002}{2}}(x-x_{0})^{2}+\cdots }$  and:

 Figure 1: Graph of ${\displaystyle t(x),}$  Taylor series representing ${\displaystyle \arctan(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 0.75.}$  ${\displaystyle x_{0}=\tan(36{\tfrac {3}{4}}^{\circ })=0.7467354177837216717375001402,}$  close to ${\displaystyle 0.75.}$  ${\displaystyle f(x_{0})=\arctan(x_{0})=0.6414085001079161195194563572}$  rad.${\displaystyle }$ y = 0.6414085001079161195194563572 +(0.6420076723519613087221948458)(x-(0.7467354177837216717375001402)) +(-0.3077848130939266477182675970)(x-0.7467354177837216717375001402)^2 +(0.05934881813852229894809158807)(x-0.7467354177837216717375001402)^3 +(0.05612149216561873709345633871)(x-0.7467354177837216717375001402)^4 +(-0.0659097533448882821311588572)(x-0.7467354177837216717375001402)^5 +(0.02864269115336634046783964776)(x-0.7467354177837216717375001402)^6 +(0.006684824489389227404750195292)(x-0.7467354177837216717375001402)^7 +(-0.01939996954693863883077829889)(x-0.7467354177837216717375001402)^8 +(0.01319629210955273736079467214)(x-0.7467354177837216717375001402)^9 +(-0.001423635337528918097834676738)(x-0.7467354177837216717375001402)^10 +(-0.005690817314508170664127596721)(x-0.7467354177837216717375001402)^11 +(0.005763416294060825609852171147)(x-0.7467354177837216717375001402)^12 +(-0.002009530403041012685757678258)(x-0.7467354177837216717375001402)^13 +(-0.001382413103546475118963526286)(x-0.7467354177837216717375001402)^14 +(0.002355235379425975362106687309)(x-0.7467354177837216717375001402)^15 +(-0.001340525935442931206538139095)(x-0.7467354177837216717375001402)^16 +(-0.0001244720120416846251034920203)(x-0.7467354177837216717375001402)^17 +(0.0008777184853106580549638629701)(x-0.7467354177837216717375001402)^18 +(-0.0007257802485492202930793702930)(x-0.7467354177837216717375001402)^19 +(0.0001539460026510816727324277808)(x-0.7467354177837216717375001402)^20 +(0.0002810020934892180446689969911)(x-0.7467354177837216717375001402)^21 +(-0.0003470330774958963760466009045)(x-0.7467354177837216717375001402)^22 +(0.0001535570475871531716152621841)(x-0.7467354177837216717375001402)^23 +(0.00006313260945054237374661397478)(x-0.7467354177837216717375001402)^24 +(-0.0001488094986598041280906554962)(x-0.7467354177837216717375001402)^25 +(0.00009977993191704606200503722720)(x-0.7467354177837216717375001402)^26 +(-0.000003667561779685224841381874106)(x-0.7467354177837216717375001402)^27 +(-0.00005609286432922550484209657985)(x-0.7467354177837216717375001402)^28 +(0.00005412057738460028511566507574)(x-0.7467354177837216717375001402)^29 +(-0.00001655090242419904039018979491)(x-0.7467354177837216717375001402)^30 +(-0.00001714674178231985986067601799)(x-0.7467354177837216717375001402)^31 +(0.00002588855802866968641107644970)(x-0.7467354177837216717375001402)^32 +(-0.00001372909690493026279553133838)(x-0.7467354177837216717375001402)^33 +(-0.000002866406864208033772447118585)(x-0.7467354177837216717375001402)^34 +(0.00001098036048658105543109288040)(x-0.7467354177837216717375001402)^35 +(-0.000008497717911244361532280438636)(x-0.7467354177837216717375001402)^36 +(0.000001259146436001274560243296183)(x-0.7467354177837216717375001402)^37 +(0.000003992939704019955177003526706)(x-0.7467354177837216717375001402)^38 +(-0.000004497268683100848779169934291)(x-0.7467354177837216717375001402)^39 +(0.000001768945188244137235636524921)(x-0.7467354177837216717375001402)^40 +(0.000001091706749083768850937760502)(x-0.7467354177837216717375001402)^41 +(-0.000002103423912310375893571195410)(x-0.7467354177837216717375001402)^42 +(0.000001301617082996039555612971998)(x-0.7467354177837216717375001402)^43 +(6.937967909808721515382339295E-8)(x-0.7467354177837216717375001402)^44 +(-8.635525611989332402947366709E-7)(x-0.7467354177837216717375001402)^45 +(7.673857631132879175874596987E-7)(x-0.7467354177837216717375001402)^46 +(-1.893140553441536683377149770E-7)(x-0.7467354177837216717375001402)^47 +(-2.944033068289732156296704644E-7)(x-0.7467354177837216717375001402)^48 +(3.930991061512879804635643270E-7)(x-0.7467354177837216717375001402)^49 +(-1.879241426421737899718180888E-7)(x-0.7467354177837216717375001402)^50 
##### A faster version

The calculation of ${\displaystyle \arctan(x)}$  above is suitable as input to application grapher.

The following python code has precision set to ${\displaystyle 33.}$  If it is desired to calculate ${\displaystyle \arctan(x)}$  for one value of ${\displaystyle x,}$  the following python code is much faster than the code supplied to grapher above.

###### python code
 data = ''' 0.641408500107916119519456357419567 0.642007672351961308722194845349589 -0.307784813093926647718267596858344 0.0593488181385222989480915882567083 0.0561214921656187370934563384765525 -0.0659097533448882821311588570897649 0.0286426911533663404678396477942956 0.00668482448938922740475019519860028 -0.0193999695469386388307782988276083 0.0131962921095527373607946721380589 -0.00142363533752891809783467677853379 -0.00569081731450817066412759667853352 0.00576341629406082560985217113222417 -0.00200953040304101268575767827219472 -0.00138241310354647511896352626325379 0.00235523537942597536210668729668636 -0.00134052593544293120653813909608214 -0.000124472012041684625103492011289663 0.000877718485310658054963862962235904 -0.000725780248549220293079370291315901 0.000153946002651081672732427784261987 0.000281002093489218044668996986822804 -0.000347033077495896376046600902527326 0.000153557047587153171615262184995174 0.0000631326094505423737466139726989411 -0.000148809498659804128090655494778209 0.0000997799319170460620050372271284211 -0.00000366756177968522484138187499300975 -0.0000560928643292255048420965789718678 0.0000541205773846002851156650754617952 -0.0000165509024241990403901897952115479 -0.0000171467417823198598606760175136922 0.0000258885580286696864110764494276036 -0.0000137290969049302627955313384274982 -0.00000286640686420803377244711837064614 0.0000109803604865810554310928802164877 -0.00000849771791124436153228043859514619 0.00000125914643600127456024329626150593 0.00000399293970401995517700352660353714 -0.00000449726868310084877916993424187367 0.00000176894518824413723563652493847337 0.00000109170674908376885093776045369610 -0.00000210342391231037589357119537437086 0.00000130161708299603955561297199526169 6.93796790980872151538233731691180E-8 -8.63552561198933240294736649885292E-7 7.67385763113287917587459691270367E-7 -1.89314055344153668337714983394592E-7 -2.94403306828973215629670453652457E-7 3.93099106151287980463564320621599E-7 -1.87924142642173789971818089630347E-7 ''' from decimal import * getcontext().prec=33 listOfMultipliers = [ Decimal(v) for v in data.split() ] def arctan (x) : x = Decimal(str(x)) if 1.05 >= x >= 0.45 : pass else : print ('\narctan(x): input is outside recommended range.',end='') y = Decimal(0) x0 = Decimal('0.746735417783721671737500140715213') # tan36.75 x_minus_x0 = x - x0 X = Decimal(1) status = 1 for p in range(0,51) : toBeAdded = listOfMultipliers[p] * X if abs(toBeAdded) < Decimal('1e-31') : status = 0 break y += toBeAdded X *= x_minus_x0 if status : print ('\narctan(x): count expired.', end='') str1 = ''' arctan({}) = {}, count = {} '''.format(x,y,p) print (str1.rstrip()) return y 
###### x close to x0
 x = Decimal('0.75') arctan(x) 
 arctan(0.75) = 0.643501108793284386802809228717315, count = 12

When ${\displaystyle x}$  is close to ${\displaystyle x_{0},}$  result is achieved with only 12 passes through loop.

###### Testing with known values

Check results using known combinations of ${\displaystyle x}$  and ${\displaystyle \arctan(x):}$

${\displaystyle \tan {\frac {3\pi }{20}}=\tan 27^{\circ }={\sqrt {5}}-1-{\sqrt {5-2{\sqrt {5}}}}.}$

For ${\displaystyle \tan 27^{\circ }}$  and other exact values of ${\displaystyle \tan(x),}$  see Exact Values for Common Angles.

 π = "3.14159265358979323846264338327950288419716939937510582097494459230781" π = Decimal(π) rt3 = Decimal(3).sqrt() rt5 = Decimal(5).sqrt() rt15 = Decimal(15).sqrt() tan27 = rt5 - 1 - (5 - 2*rt5).sqrt() tan30 = 1/rt3 v1 = 2 - (2-rt3)*(3+rt5) ; v2 = 2+ (2*(5-rt5)).sqrt() tan33 = v1*v2/4 tan36 = (5-2*rt5).sqrt() v1 = (2-rt3)*(3-rt5)-2 ; v2 = 2 - (2*(5+rt5)).sqrt() tan39 = v1*v2/4 tan42 = ( rt15 + rt3 - (10 + 2*rt5).sqrt() )/2 tan45 = Decimal(1) values = ( ( 9*π/60, tan27, 27), (10*π/60, tan30, 30), (11*π/60, tan33, 33), (12*π/60, tan36, 36), (13*π/60, tan39, 39), (14*π/60, tan42, 42), ( π/ 4, tan45, 45), ) for value in values : angleInRadians, tan, angleInDegrees = value y = arctan(tan) print ('for', angleInDegrees, 'degrees, difference =', angleInRadians-y) 
 arctan(0.509525449494428810513706911250666) = 0.471238898038468985769396507491970, count = 41 for 27 degrees, difference = -4.5E-32 arctan(0.577350269189625764509148780501958) = 0.523598775598298873077107230546614, count = 34 for 30 degrees, difference = -3.1E-32 arctan(0.649407593197510576982062911311432) = 0.575958653158128760384817953601229, count = 27 for 33 degrees, difference = 1.3E-32 arctan(0.726542528005360885895466757480614) = 0.628318530717958647692528676655896, count = 17 for 36 degrees, difference = 4E-33 arctan(0.809784033195007148036991374235772) = 0.680678408277788535000239399710521, count = 23 for 39 degrees, difference = 3.7E-32 arctan(0.90040404429783994512047720388537) = 0.733038285837618422307950122765236, count = 33 for 42 degrees, difference = -1.9E-32 arctan(1) = 0.785398163397448309615660845819846, count = 43 for 45 degrees, difference = 3.0E-32

 tan24 = ( (50+22*rt5).sqrt() - 3*rt3 - rt15 ) / 2 tan46_5 = Decimal('1.05378012528096218058753672331544') # tan(46.5) values = ( (24*π/180, tan24, 24), (93*π/360, tan46_5, 46.5), ) for value in values : angleInRadians, tan, angleInDegrees = value y = arctan(tan) print ('for x =', float(tan), 'difference =', angleInRadians-y) 
 arctan(x): input is outside recommended range. arctan(0.44522868530853616392236703064567) = 0.418879020478639098461685784437249, count = 47 for x = 0.44522868530853615 difference = 1.8E-32 arctan(x): input is outside recommended range. arctan(1.05378012528096218058753672331544) = 0.811578102177363253269516207347250, count = 48 for x = 1.0537801252809622 difference = -4.4E-32

For ${\displaystyle 1.05\geq x\geq 0.45}$  the above calculation of ${\displaystyle \arctan(x)}$  is accurate to more than 30 places of decimals.

 If input is outside recommended limits, this does not necessarily mean that result is invalid. If ${\displaystyle \tan 51^{\circ }\geq x\geq \tan 9^{\circ },}$  result is accurate to precision of python floats, 15 places of decimals.

### arcsin(x)

${\displaystyle y=\arcsin(x)}$

${\displaystyle x=\sin(y)}$

${\displaystyle {\frac {dx}{dy}}=\cos(y)={\sqrt {1-x^{2}}}}$

${\displaystyle {\frac {dy}{dx}}={\frac {1}{\cos(y)}}={\frac {1}{\sqrt {1-x^{2}}}}}$

Simple differential equations eliminate the square root and make calculations so much easier.

Let ${\displaystyle a={\frac {dy}{dx}}}$

Then ${\displaystyle a^{2}U=1}$  where ${\displaystyle U=1-x^{2}}$  and ${\displaystyle U^{'}=-2x.}$

Differentiating both sides:

${\displaystyle a^{2}(-2x)+U2aa^{'}=0}$

${\displaystyle U2aa^{'}=2xa^{2}}$

${\displaystyle a^{'}={\frac {2xaa}{2aU}}={\frac {ax}{U}}.}$

Let ${\displaystyle b=a^{'}}$

Then ${\displaystyle bU=ax}$

Differentiating both sides:

${\displaystyle b(-2x)+Ub^{'}=a+xa^{'}=a+xb}$

Let ${\displaystyle c=b^{'}}$

Then ${\displaystyle c={\frac {a+3bx}{U}}}$

When ${\displaystyle x=0,\ U=1.}$  Calculation of more derivatives yields:

${\displaystyle y=f(x)=\arcsin(x)}$

${\displaystyle a=f^{'}(x)={\frac {1}{\sqrt {1-x^{2}}}}}$

${\displaystyle b=f^{''}(x)=ax}$

${\displaystyle c=f^{'''}(x)=a+3bx}$

${\displaystyle d=f^{''''}(x)=4b+5cx}$

${\displaystyle g=f^{v}(x)=9c+7dx}$

${\displaystyle h=f^{vi}(x)=16d+9gx}$

${\displaystyle j=f^{vii}(x)=25g+11hx}$

${\displaystyle k=f^{viii}(x)=36h+13jx}$

${\displaystyle l=f^{viiii}(x)=49j+15kx}$

and so on.

${\displaystyle \cdots =k=h=d=b=0}$

${\displaystyle a=1;\ c=1^{2}a;\ g=3^{2}c;\ j=5^{2}g;\ l=7^{2}j;\ \cdots .}$

${\displaystyle \arcsin(x)=x+{\frac {1}{3!}}x^{3}+{\frac {3^{2}}{5!}}x^{5}+{\frac {3^{2}\cdot 5^{2}}{7!}}x^{7}+{\frac {3^{2}\cdot 5^{2}\cdot 7^{2}}{9!}}x^{9}+{\frac {3^{2}\cdot 5^{2}\cdot 7^{2}\cdot 9^{2}}{11!}}x^{11}+\cdots }$

${\displaystyle \arcsin(x)=x+{\frac {1}{3!}}x^{3}+{\frac {3}{(2!)(2^{2})5}}x^{5}+{\frac {3\cdot 5}{(3!)(2^{3})7}}x^{7}+{\frac {3\cdot 5\cdot 7}{(4!)(2^{4})9}}x^{9}+{\frac {3\cdot 5\cdot 7\cdot 9}{(5!)(2^{5})11}}x^{11}+\cdots }$

#### As programming algorithm:

${\displaystyle \arcsin(x)=x+{\frac {top=1}{(bottom=2)3}}(X=x^{3})}$  ${\displaystyle +{\frac {top=top(5-2)}{(bottom=bottom(5-1))5}}(X=X(x^{2}))}$  ${\displaystyle +{\frac {top=top(7-2)}{(bottom=bottom(7-1))7}}(X=X(x^{2}))}$  ${\displaystyle +\cdots }$  ${\displaystyle +{\frac {top=top(n-2)}{(bottom=bottom(n-1))n}}(X=X(x^{2}))}$

#### As implemented in Python:

from decimal import * # Default precision is 28.

π = ("3.14159265358979323846264338327950288419716939937510582097494459230781")
π = Decimal(π)

x = Decimal(2).sqrt()/2 # Expecting result of π/4

xSQ = x*x
X = x*xSQ

top = Decimal(1)
bottom = Decimal(2)

bottom1 = bottom*3
sum = x + X*top / bottom1

status = 1
for n in range(5,200,2) :
X = X*xSQ
top = top*(n-2)
bottom = bottom*(n-1)
bottom1 = bottom*n
status = 0
break

if status :
print ('error. count expired.')
else :
print (x, sum==π/4, n)

0.707106781186547524400844362 True 171


#### In practice

If ${\displaystyle |x|}$  is close to ${\displaystyle 1,}$  the calculation of ${\displaystyle \arcsin(x)}$  will take forever.

If you limit ${\displaystyle x}$  to ${\displaystyle \sin 45^{\circ }>=x>=-\sin 45^{\circ },}$  then ${\displaystyle x^{2}<=0.5}$  and each term is guaranteed to be less than half the preceding term.

If ${\displaystyle x>\sin 45^{\circ },}$  let ${\displaystyle t={\frac {\pi }{2}}-y.}$

Then ${\displaystyle \sin t=\cos y={\sqrt {1-x^{2}}};\ t=\arcsin(\cos y);\ y={\frac {\pi }{2}}-t.}$

### Integral of expression

${\displaystyle {\frac {dy}{dx}}=a^{-x^{2}}}$

According to the reference "this expression cannot be integrated..." However, if we convert the expression to a Taylor series, the integral of the series is quite easily calculated.

Let ${\displaystyle y=f(x)=a^{-x^{2}}={\frac {1}{a^{x^{2}}}}}$

When ${\displaystyle x=0,\ y=1}$  and the following sequence can be produced.

${\displaystyle y^{''}=-2Ay}$  where ${\displaystyle A=\ln(a).}$

${\displaystyle y^{(4)}=-6Ay^{''}}$

${\displaystyle y^{(6)}=-10Ay^{(4)}}$

${\displaystyle y^{(8)}=-14Ay^{(6)}}$

${\displaystyle y^{(10)}=-18Ay^{(8)}}$

${\displaystyle y^{(12)}=-22Ay^{(10)}}$  and so on.

Taylor series of ${\displaystyle f(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 0=t(x)=1+c02\cdot x^{2}+c04\cdot x^{4}+c06\cdot x^{6}+\cdots }$

where ${\displaystyle c02={\frac {y^{''}}{2!}};\ c04={\frac {y^{(4)}}{4!}};\ c06={\frac {y^{(6)}}{6!}}\cdots }$

For ${\displaystyle a=2}$  python code produces the following:

c02 = -0.6931471805599453094172321215
c04 = 0.2402265069591007123335512632
c06 = -0.05550410866482157995314226378
c08 = 0.009618129107628477161979071575
c10 = -0.001333355814642844342341222199
c12 = 0.0001540353039338160995443709734
c14 = -0.00001525273380405984028002543902
c16 = 0.000001321548679014430948840375823
c18 = -1.017808600923969972749000760E-7
c20 = 7.054911620801123329875392184E-9
c22 = -4.445538271870811497596408561E-10
c24 = 2.567843599348820514199480240E-11
c26 = -1.369148885390412888089195400E-12
c28 = 6.778726354822545633449104318E-14
c30 = -3.132436707088428621634944443E-15
c32 = 1.357024794875514719311296624E-16
c34 = -5.533046532458242043485546100E-18
c36 = 2.130675335489117996020398479E-19
c38 = -7.773008428857356419088997166E-21
c40 = 2.693919438465583416972861154E-22
c42 = -8.891822206800239171648619811E-24


For ${\displaystyle a}$  close to ${\displaystyle 1}$  or ${\displaystyle x}$  close to ${\displaystyle 0,}$  the Taylor series is a quite accurate representation of the original expression. When abs${\displaystyle (x)\leq 1.6,}$  the abs(maximum difference) between expression and Taylor series is ${\displaystyle <1e-15.}$

For greater accuracy, greater precision may be specified in python or more terms after ${\displaystyle c42}$  may be added.

The integral ${\displaystyle =I(x)=x+C02\cdot x^{3}+C04\cdot x^{5}+C06\cdot x^{7}+\cdots }$

where ${\displaystyle C02={\frac {c02}{3}};\ C04={\frac {c04}{5}};\ C06={\frac {c06}{7}}\cdots }$

 Figure 1: Curves of ${\displaystyle f(x)}$  and ${\displaystyle t(x)}$  where ${\displaystyle t(x)}$  is Taylor series representing ${\displaystyle f(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 0}$ . In figure to right, ${\displaystyle t(x)=1.5+\cdots ,}$  separating ${\displaystyle t(x)}$  from ${\displaystyle f(x)}$  to illustrate shapes of curves. The correct value of ${\displaystyle t(x)=1+\cdots }$ . When ${\displaystyle x=1,\ f(x)=0.5}$  and ${\displaystyle t(x)=0.4999999999999999999999997281}$ . To 24 places of decimals ${\displaystyle t(x)=0.5000}$ _${\displaystyle 0000}$ _${\displaystyle 0000}$ _${\displaystyle 0000}$ _${\displaystyle 0000}$ _${\displaystyle 0000}$ .
 Figure 1: Curves of ${\displaystyle f(x)}$  and ${\displaystyle I(x)}$  where ${\displaystyle I(x)}$  is integral of ${\displaystyle t(x)}$  and represents integral of ${\displaystyle f(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 0}$ . In this example, constant of integration ${\displaystyle C=0.}$  If it were important to calculate the area under ${\displaystyle f(x)}$  from ${\displaystyle x=0}$  to ${\displaystyle x=1,\ I(x)}$  returns ${\displaystyle 0.8100254543909558266292852604,}$  accurate to about 26 places of decimals.

### sin(x) using (x - x0)

${\displaystyle f(x)=\sin(x)}$

${\displaystyle f'(x)=\cos(x)}$

${\displaystyle f''(x)=-\sin(x)}$

${\displaystyle f'''(x)=-\cos(x)}$

${\displaystyle f^{(4)}=\sin(x)}$

Let ${\displaystyle x_{0}={\frac {\pi }{4}}=45^{\circ }}$

${\displaystyle f(x_{0})=f({\frac {\pi }{4}})=\sin({\frac {\pi }{4}})={\frac {\sqrt {2}}{2}}}$

${\displaystyle f'(x_{0})=f'({\frac {\pi }{4}})=\cos({\frac {\pi }{4}})={\frac {\sqrt {2}}{2}}}$

${\displaystyle f''(x_{0})=f''({\frac {\pi }{4}})=-\sin({\frac {\pi }{4}})=-{\frac {\sqrt {2}}{2}}}$

${\displaystyle f'''(x_{0})=f'''({\frac {\pi }{4}})=-\cos({\frac {\pi }{4}})=-{\frac {\sqrt {2}}{2}}}$

${\displaystyle f^{(4)}(x_{0})=f^{(4)}({\frac {\pi }{4}})=\sin({\frac {\pi }{4}})={\frac {\sqrt {2}}{2}}}$

${\displaystyle t(x)={\frac {\sqrt {2}}{2}}\cdot (x-x_{0})^{0}}$  ${\displaystyle +{\frac {\sqrt {2}}{2}}\cdot (x-x_{0})^{1}}$  ${\displaystyle -{\frac {\sqrt {2}}{2}}\cdot {\frac {1}{2!}}\cdot (x-x_{0})^{2}}$  ${\displaystyle -{\frac {\sqrt {2}}{2}}\cdot {\frac {1}{3!}}\cdot (x-x_{0})^{3}}$  ${\displaystyle +{\frac {\sqrt {2}}{2}}\cdot {\frac {1}{4!}}\cdot (x-x_{0})^{4}+\cdots }$

Let ${\displaystyle X=(x-x_{0})=(x-{\frac {\pi }{4}})}$

Then ${\displaystyle t(x)={\frac {\sqrt {2}}{2}}(}$  ${\displaystyle 1+X}$  ${\displaystyle -{\frac {X^{2}}{2!}}-{\frac {X^{3}}{3!}}}$  ${\displaystyle +{\frac {X^{4}}{4!}}+{\frac {X^{5}}{5!}}}$  ${\displaystyle -{\frac {X^{6}}{6!}}-{\frac {X^{7}}{7!}}}$  ${\displaystyle \ \cdots }$  ${\displaystyle )}$

where ${\displaystyle t(x)}$  is the Taylor series representing ${\displaystyle f(x)=\sin(x)}$  for values of ${\displaystyle x}$  close to ${\displaystyle 45^{\circ }}$  or ${\displaystyle {\frac {\pi }{4}}.}$

If ${\displaystyle {\frac {\pi }{2}}(90^{\circ })\geq x\geq 0}$ , then ${\displaystyle t(x)}$  containing powers of ${\displaystyle X}$  through ${\displaystyle 15}$  is sufficient to keep the error to ${\displaystyle <1e-15.}$

#### Almost a sine curve

 Figure 1: Graph of ${\displaystyle t(x)}$  representing ${\displaystyle \sin(x)}$  for ${\displaystyle x}$  close to ${\displaystyle {\frac {\pi }{4}}}$ . Graph to right was produced by Grapher on a Mac. A python script produced the following data: ( (2^(0.5))/2 )( 1 +(x-.785398163397448) -((x-.785398163397448)^2)/2 -((x-.785398163397448)^3)/(2(3)) +((x-.785398163397448)^4)/(24) +((x-.785398163397448)^5)/(120) -((x-.785398163397448)^6)/(720) -((x-.785398163397448)^7)/(5040) +((x-.785398163397448)^8)/(40320) +((x-.785398163397448)^9)/(362880) -((x-.785398163397448)^10)/(3628800) -((x-.785398163397448)^11)/(39916800) +((x-.785398163397448)^12)/(479001600) +((x-.785398163397448)^13)/(6227020800) -((x-.785398163397448)^14)/(87178291200) -((x-.785398163397448)^15)/(1307674368000) +((x-.785398163397448)^16)/(20922789888000) +((x-.785398163397448)^17)/(355687428096000) -((x-.785398163397448)^18)/(6402373705728000) -((x-.785398163397448)^19)/(121645100408832000) +((x-.785398163397448)^20)/(2432902008176640000) +((x-.785398163397448)^21)/(51090942171709440000) -((x-.785398163397448)^22)/(1124000727777607680000) -((x-.785398163397448)^23)/(25852016738884976640000) +((x-.785398163397448)^24)/(620448401733239439360000) +((x-.785398163397448)^25)/(15511210043330985984000000) -((x-.785398163397448)^26)/(403291461126605635584000000) -((x-.785398163397448)^27)/(10888869450418352160768000000) +((x-.785398163397448)^28)/(304888344611713860501504000000) +((x-.785398163397448)^29)/(8841761993739701954543616000000) )  I highlighted the data, copied it with command C and pasted it into the input area of Grapher. Well done! Grapher.

### Integral of 1/x

The Taylor series for ${\displaystyle f(x)={\frac {1}{x}}}$  for ${\displaystyle x}$  close to ${\displaystyle 2}$  is:

${\displaystyle t(x)={\frac {1}{2}}-{\frac {1}{2^{2}}}\cdot (x-2)+{\frac {1}{2^{3}}}\cdot (x-2)^{2}-{\frac {1}{2^{4}}}\cdot (x-2)^{3}\cdots }$

The integral of this series is:

${\displaystyle I(x)={\frac {1}{2}}\cdot (x-2)-(({\frac {1}{2^{2}}})/2)\cdot (x-2)^{2}+(({\frac {1}{2^{3}}})/3)\cdot (x-2)^{3}-(({\frac {1}{2^{4}}})/4)\cdot (x-2)^{4}\cdots +C}$

The integral of ${\displaystyle {\frac {1}{x}}=\ln(x).}$

Therefore ${\displaystyle \ln(x)=I(x)}$  but what is the value of ${\displaystyle C?}$

Without ${\displaystyle C,}$  when ${\displaystyle x=2,I(x)=0.\ I(x)}$  should be ${\displaystyle \ln(2).}$

Therefore, for ${\displaystyle x}$  close to ${\displaystyle 2:}$

${\displaystyle \ln(x)=I(x)}$  where ${\displaystyle C=\ln(2).}$

But what is the value of ${\displaystyle \ln(2)?}$

Without ${\displaystyle C,}$  when ${\displaystyle x=1,\ I(x)=-0.693147180559945.\ I(x)}$  should be ${\displaystyle 0.}$

Therefore ${\displaystyle C=0.693147180559945}$  or ${\displaystyle \ln(2).}$

For ${\displaystyle x}$  close to ${\displaystyle 2:}$

${\displaystyle \ln(x)=\ln(2)+{\frac {1}{2}}\cdot (x-2)-(({\frac {1}{2^{2}}})/2)\cdot (x-2)^{2}+(({\frac {1}{2^{3}}})/3)\cdot (x-2)^{3}-(({\frac {1}{2^{4}}})/4)\cdot (x-2)^{4}\cdots }$

where ${\displaystyle \ln(2)=0.693147180559945\dots }$

 Figure 1: Graph of ${\displaystyle I(x)}$  representing ${\displaystyle \ln(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 2}$ . y = 0.693147180559945 + ((1/(2^1))/1)(x - 2)^1 - ((1/(2^2))/2)(x - 2)^2 + ((1/(2^3))/3)(x - 2)^3 - ((1/(2^4))/4)(x - 2)^4 + ((1/(2^5))/5)(x - 2)^5 - ((1/(2^6))/6)(x - 2)^6 + ((1/(2^7))/7)(x - 2)^7 ........................... ........................... - ((1/(2^42))/42)(x - 2)^42 + ((1/(2^43))/43)(x - 2)^43 - ((1/(2^44))/44)(x - 2)^44 + ((1/(2^45))/45)(x - 2)^45 - ((1/(2^46))/46)(x - 2)^46 + ((1/(2^47))/47)(x - 2)^47 - ((1/(2^48))/48)(x - 2)^48 + ((1/(2^49))/49)(x - 2)^49 

#### Calculating ln(x)

This section presents a system for calculating ${\displaystyle \ln(x)}$  for ${\displaystyle 10\geq x\geq 1,}$  knowing only that ${\displaystyle \ln(1)=0.}$

# python code
L1 = [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8,
3.0, 3.3, 3.6, 3.9, 4.2, 4.6, 5.0, 5.5, 6.0, 6.6, 7.2, 7.9, 8.6, 9.3, 10.0]


where L1 is a list containing values of ${\displaystyle x_{0}}$  in which each value after the first is ${\displaystyle \leq 10}$ % more than the preceding value.

# python code
from decimal import *
getcontext().prec=53 # Preparing for values containing 50 places of decimals.
almostZero = Decimal('1e-' + str( getcontext().prec ))

L1 = [ Decimal(str(v)) for v in L1 ]

def ln_x (x, x0, C=0) :
'''
return ln(x) for x close to x0.
ln_x_ = ln_x (x, x0, C)
C is the constant of integration. Usually C = ln(x0).
'''
x, x0, C = [ Decimal(str(v)) for v in (x,x0,C) ]
x_minus_x0 = x-x0;
#    print ('x,x0,x_minus_x0 =',x,x0,x_minus_x0)
sum = 0
progressiveValue = 1
status = 1 ; limit = 4*getcontext().prec
multiplier = x_minus_x0/x0
for p in range (1, limit, 2) :
progressiveValue *= multiplier

progressiveValue *= multiplier

status = 0
break
if (status) :
print ('ln_x error: count expired, p =',p)
exit (95)
return sum+C


The performance of the above code is better than logarithmic to base ${\displaystyle 10}$ . This means, for example, if ${\displaystyle x}$  contains 60 significant decimal digits, the above code produces a result with fewer than 30 passes through the loop because each iteration of the lop performs two operations.

L1 is designed so that multiplier ${\displaystyle ={\frac {x\_minus\_x_{0}}{x_{0}}}}$  is always ${\displaystyle \leq {\frac {1}{10}}.}$  When ${\displaystyle x}$  is very close to ${\displaystyle x_{0},}$  time to calculate ${\displaystyle \ln(x)}$  is greatly reduced.

 Figure 1: Graph of ${\displaystyle I(x)}$  representing ${\displaystyle \ln(x)}$  for ${\displaystyle x}$  close to ${\displaystyle 7.9}$ . When value ${\displaystyle {\frac {x-x_{0}}{x_{0}}}>1,}$  the series diverges. In this case, when ${\displaystyle x>15.8.}$  y = ln(7.9) + ((1/((7.9)^(1)))/(1))((x - 7.9)^(1)) - ((1/((7.9)^(2)))/(2))((x - 7.9)^(2)) + ((1/((7.9)^(3)))/(3))((x - 7.9)^(3)) - ((1/((7.9)^(4)))/(4))((x - 7.9)^(4)) + ((1/((7.9)^(5)))/(5))((x - 7.9)^(5)) - ((1/((7.9)^(6)))/(6))((x - 7.9)^(6)) + ((1/((7.9)^(7)))/(7))((x - 7.9)^(7)) - ((1/((7.9)^(8)))/(8))((x - 7.9)^(8)) + ((1/((7.9)^(9)))/(9))((x - 7.9)^(9)) ..................... ..................... - ((1/((7.9)^(22)))/(22))((x - 7.9)^(22)) + ((1/((7.9)^(23)))/(23))((x - 7.9)^(23)) - ((1/((7.9)^(24)))/(24))((x - 7.9)^(24)) + ((1/((7.9)^(25)))/(25))((x - 7.9)^(25)) - ((1/((7.9)^(26)))/(26))((x - 7.9)^(26)) + ((1/((7.9)^(27)))/(27))((x - 7.9)^(27)) - ((1/((7.9)^(28)))/(28))((x - 7.9)^(28)) + ((1/((7.9)^(29)))/(29))((x - 7.9)^(29)) 

The next piece of code progressively calculates ${\displaystyle \ln(1.1),\ \ln(1.2),\ \ln(1.3)\ \dots }$  and puts the calculated values in dictionary dict2.

dict2 = dict()
dict2[Decimal('1.0')] = Decimal(0)

for p in range(1, len(L1)) :
x = L1[p]
x0 = L1[p-1]
C = dict2[x0]
#    print ('L1[{}]={}'.format(p,L1[p]))
ln = ln_x (x, x0, C)
dict2[x] = ln

print ('dict2 = {')
for x0 in dict2 :
print ("Decimal('{}'):  +Decimal('{}'),".format( (' '+str(x0))[-4:], dict2[x0]) )
print ('}')

dict2 = {
Decimal(' 1.0'):  +Decimal('0'),
Decimal(' 1.1'):  +Decimal('0.095310179804324860043952123280765092220605365308644199'),
Decimal(' 1.2'):  +Decimal('0.18232155679395462621171802515451463319738933791448698'),
Decimal(' 1.3'):  +Decimal('0.26236426446749105203549598688095439720416645613143414'),
Decimal(' 1.4'):  +Decimal('0.33647223662121293050459341021699209011148337531334347'),
Decimal(' 1.5'):  +Decimal('0.40546510810816438197801311546434913657199042346249420'),
Decimal(' 1.6'):  +Decimal('0.47000362924573555365093703114834206470089904881224805'),
Decimal(' 1.7'):  +Decimal('0.53062825106217039623154316318876232798710152395697182'),
Decimal(' 1.8'):  +Decimal('0.58778666490211900818973114061886376976937976137698120'),
Decimal(' 1.9'):  +Decimal('0.64185388617239477599103597720348932963627777267035586'),
Decimal(' 2.0'):  +Decimal('0.69314718055994530941723212145817656807550013436025527'),
Decimal(' 2.2'):  +Decimal('0.78845736036427016946118424473894166029610549966889947'),
Decimal(' 2.4'):  +Decimal('0.87546873735389993562895014661269120127288947227474225'),
Decimal(' 2.6'):  +Decimal('0.95551144502743636145272810833913096527966659049168941'),
Decimal(' 2.8'):  +Decimal('1.0296194171811582399218255316751686581869835096735987'),
Decimal(' 3.0'):  +Decimal('1.0986122886681096913952452369225257046474905578227494'),
Decimal(' 3.3'):  +Decimal('1.1939224684724345514391973602032907968680959231313936'),
Decimal(' 3.6'):  +Decimal('1.2809338454620643176069632620770403378448798957372364'),
Decimal(' 3.9'):  +Decimal('1.3609765531356007434307412238034801018516570139541836'),
Decimal(' 4.2'):  +Decimal('1.4350845252893226218998386471395177947589739331360929'),
Decimal(' 4.6'):  +Decimal('1.5260563034950493162059934985840084789167789605719180'),
Decimal(' 5.0'):  +Decimal('1.6094379124341003746007593332261876395256013542685177'),
Decimal(' 5.5'):  +Decimal('1.7047480922384252346447114565069527317462067195771619'),
Decimal(' 6.0'):  +Decimal('1.7917594692280550008124773583807022727229906921830047'),
Decimal(' 6.6'):  +Decimal('1.8870696490323798608564294816614673649435960574916489'),
Decimal(' 7.2'):  +Decimal('1.9740810260220096270241953835352169059203800300974917'),
Decimal(' 7.9'):  +Decimal('2.0668627594729758101549540867970467145724397357938367'),
Decimal(' 8.6'):  +Decimal('2.1517622032594620488720831801196593960335348306130377'),
Decimal(' 9.3'):  +Decimal('2.2300144001592102533064181067805187074963279996745685'),
Decimal('10.0'):  +Decimal('2.3025850929940456840179914546843642076011014886287730'),
}

 A quick check: ln(2.2) - (ln(1.1) + ln(2.0)) = 0E-50 ln(2.4) - (ln(1.2) + ln(2.0)) = 0E-50 ln(2.6) - (ln(1.3) + ln(2.0)) = 0E-50 ln(2.8) - (ln(1.4) + ln(2.0)) = 0E-50 ln(3.0) - (ln(1.5) + ln(2.0)) = -0E-50 ln(3.3) - (ln(1.1) + ln(3.0)) = 0E-50 ln(3.6) - (ln(1.2) + ln(3.0)) = 0E-50 ln(3.6) - (ln(1.8) + ln(2.0)) = -0E-50 ln(3.9) - (ln(1.3) + ln(3.0)) = 0E-50 ln(4.2) - (ln(1.4) + ln(3.0)) = 0E-50 ln(5.5) - (ln(1.1) + ln(5.0)) = 0E-50 ln(6.0) - (ln(1.2) + ln(5.0)) = 0E-50 ln(6.0) - (ln(2.0) + ln(3.0)) = 0E-50 ln(6.6) - (ln(1.1) + ln(6.0)) = 0E-50 ln(6.6) - (ln(2.2) + ln(3.0)) = 0E-50 ln(6.6) - (ln(3.3) + ln(2.0)) = 0E-50 ln(7.2) - (ln(1.2) + ln(6.0)) = 0E-50 ln(7.2) - (ln(2.4) + ln(3.0)) = 0E-50 ln(10.0) - (ln(5.0) + ln(2.0)) = 0E-50 

Put the data from dict2 into 2 tuples Tx0, Tln_x0

Tx0 = tuple(L1)
Tln_x0 = tuple([ dict2[v] for v in Tx0 ])


Calculate the decision points.

L1 = []
for p in range (0, len(Tx0)-1) :
a,b = Tx0[p], Tx0[p+1]
dp = 2*a*b/(a+b)
L1 += [ dp ]
Tdp = tuple(L1)


Display the three tuples.

for T in ('Tx0', 'Tln_x0', 'Tdp') :
t = eval(T)
print (T, '= (')
for v in t :
print ("""+Decimal('{}'),""".format(v))
print (')')
print ()


Previous code was used to produce three tuples. Operational code follows:

Values of ${\displaystyle x_{0}:}$

Tx0 = ( Decimal('1'), Decimal('1.1'), Decimal('1.2'), Decimal('1.3'), Decimal('1.4'), Decimal('1.5'), Decimal('1.6'), Decimal('1.7'), Decimal('1.8'), Decimal('1.9'), Decimal('2.0'), Decimal('2.2'), Decimal('2.4'), Decimal('2.6'), Decimal('2.8'), Decimal('3.0'), Decimal('3.3'), Decimal('3.6'), Decimal('3.9'), Decimal('4.2'), Decimal('4.6'), Decimal('5.0'), Decimal('5.5'), Decimal('6.0'), Decimal('6.6'), Decimal('7.2'), Decimal('7.9'), Decimal('8.6'), Decimal('9.3'), Decimal('10.0'), )

Values of ${\displaystyle \ln(x_{0}):}$

Tln_x0 = ( +Decimal('0'), +Decimal('0.095310179804324860043952123280765092220605365308644199'), +Decimal('0.18232155679395462621171802515451463319738933791448698'), +Decimal('0.26236426446749105203549598688095439720416645613143414'), +Decimal('0.33647223662121293050459341021699209011148337531334347'), +Decimal('0.40546510810816438197801311546434913657199042346249420'), +Decimal('0.47000362924573555365093703114834206470089904881224805'), +Decimal('0.53062825106217039623154316318876232798710152395697182'), +Decimal('0.58778666490211900818973114061886376976937976137698120'), +Decimal('0.64185388617239477599103597720348932963627777267035586'), +Decimal('0.69314718055994530941723212145817656807550013436025527'), +Decimal('0.78845736036427016946118424473894166029610549966889947'), +Decimal('0.87546873735389993562895014661269120127288947227474225'), +Decimal('0.95551144502743636145272810833913096527966659049168941'), +Decimal('1.0296194171811582399218255316751686581869835096735987'), +Decimal('1.0986122886681096913952452369225257046474905578227494'), +Decimal('1.1939224684724345514391973602032907968680959231313936'), +Decimal('1.2809338454620643176069632620770403378448798957372364'), +Decimal('1.3609765531356007434307412238034801018516570139541836'), +Decimal('1.4350845252893226218998386471395177947589739331360929'), +Decimal('1.5260563034950493162059934985840084789167789605719180'), +Decimal('1.6094379124341003746007593332261876395256013542685177'), +Decimal('1.7047480922384252346447114565069527317462067195771619'), +Decimal('1.7917594692280550008124773583807022727229906921830047'), +Decimal('1.8870696490323798608564294816614673649435960574916489'), +Decimal('1.9740810260220096270241953835352169059203800300974917'), +Decimal('2.0668627594729758101549540867970467145724397357938367'), +Decimal('2.1517622032594620488720831801196593960335348306130377'), +Decimal('2.2300144001592102533064181067805187074963279996745685'), +Decimal('2.3025850929940456840179914546843642076011014886287730'), )

Decision points:

Tdp = ( +Decimal('1.0476190476190476190476190476190476190476190476190476'), +Decimal('1.1478260869565217391304347826086956521739130434782609'), +Decimal('1.248'), +Decimal('1.3481481481481481481481481481481481481481481481481481'), +Decimal('1.4482758620689655172413793103448275862068965517241379'), +Decimal('1.5483870967741935483870967741935483870967741935483871'), +Decimal('1.6484848484848484848484848484848484848484848484848485'), +Decimal('1.7485714285714285714285714285714285714285714285714286'), +Decimal('1.8486486486486486486486486486486486486486486486486486'), +Decimal('1.9487179487179487179487179487179487179487179487179487'), +Decimal('2.0952380952380952380952380952380952380952380952380952'), +Decimal('2.2956521739130434782608695652173913043478260869565217'), +Decimal('2.496'), +Decimal('2.6962962962962962962962962962962962962962962962962963'), +Decimal('2.8965517241379310344827586206896551724137931034482759'), +Decimal('3.1428571428571428571428571428571428571428571428571429'), +Decimal('3.4434782608695652173913043478260869565217391304347826'), +Decimal('3.744'), +Decimal('4.0444444444444444444444444444444444444444444444444444'), +Decimal('4.3909090909090909090909090909090909090909090909090909'), +Decimal('4.7916666666666666666666666666666666666666666666666667'), +Decimal('5.2380952380952380952380952380952380952380952380952381'), +Decimal('5.7391304347826086956521739130434782608695652173913043'), +Decimal('6.2857142857142857142857142857142857142857142857142857'), +Decimal('6.8869565217391304347826086956521739130434782608695652'), +Decimal('7.5337748344370860927152317880794701986754966887417219'), +Decimal('8.2351515151515151515151515151515151515151515151515152'), +Decimal('8.9363128491620111731843575418994413407821229050279330'), +Decimal('9.6373056994818652849740932642487046632124352331606218'), )

At each decision point ${\displaystyle x}$  is assigned to the next low value or the next high value of ${\displaystyle x_{0}.}$  For example, if ${\displaystyle x}$  is between ${\displaystyle 1.2,\ 1.3,}$  the decision point is ${\displaystyle 1.248.}$  This means that the ratio ${\displaystyle {\frac {1.248-1.2}{1.2}}={\frac {1.3-1.248}{1.3}}=0.04}$  and the maximum value of abs${\displaystyle ({\frac {x-x_{0}}{x_{0}}})=0.04.}$

During creation of Tln_x0 the maximum value of ${\displaystyle {\frac {x-x_{0}}{x_{0}}}={\frac {1}{10}}.}$  During normal operations after creation of Tln_x0, maximum value of abs${\displaystyle ({\frac {x-x_{0}}{x_{0}}})={\frac {1.047619\dots -1}{1}}}$  between ${\displaystyle 1.0,\ 1.1.}$

Choose a suitable value of x0 with the value of its natural log.

def choose_x0_C (x) :
'''
(x0, C) = choose_x0_C (x)
'''
if (10 >= x >= 1) : pass
else: exit (93)

for p in range (len(Tx0)-2, -1, -1):
if (x >= Tx0[p]) :
if (x >= Tdp[p]) : return (Tx0[p+1], Tln_x0[p+1])
return (Tx0[p], Tln_x0[p])
exit(92)


Ready to calculate, for example, ${\displaystyle \ln(3.456789)}$

x = Decimal('3.456789')
(x0, C) = choose_x0_C (x)
ln_x_ = ln_x (x, x0, C)
print ('ln({}) = {}'.format(x, ln_x_.quantize(Decimal('1e-50'))))

ln(3.456789) = 1.24034_01234_96758_02986_53847_82231_30004_00340_53893_89110 # displayed with 50 places of decimals.


#### Testing ln(x)

Choose random numbers ${\displaystyle a,\ b}$  so that ${\displaystyle 10\geq a\geq b\geq 1.}$

Produce values ${\displaystyle \ln(a),\ \ln(b).}$

Calculate product ${\displaystyle p=a\cdot b.}$

Produce value ${\displaystyle \ln(p).}$

If ${\displaystyle p>10,\ p=({\frac {p}{10}})\cdot 10}$  and ${\displaystyle \ln(p)=\ln({\frac {p}{10}})+\ln(10).}$

Verify that ${\displaystyle \ln(p)=\ln(a)+\ln(b).}$

# python code
import random

ln_10 = Tln_x0[-1]
fiftyPlacesOfDecimals = Decimal('1e-50')

def randomNumber() :
s1 = str(random.getrandbits(getcontext().prec * 4))
d1 = Decimal(s1[0] + '.' + s1[1:])
if (d1 == 0) : d1 = randomNumber()
while (d1 < 1) : d1 *= 10
return d1

d1 = randomNumber()
d2 = randomNumber()

(x0, C) = choose_x0_C (d1)
ln_d1_ = ln_x (d1, x0, C)

(x0, C) = choose_x0_C (d2)
ln_d2_ = ln_x (d2, x0, C)

product = d1*d2
if (product > 10) :
product /= 10

(x0, C) = choose_x0_C (product)
ln_product_ = ln_x (product, x0, C)
if (add_ln10) : ln_product_ += ln_10

difference = (ln_product_ - ( ln_d1_ + ln_d2_ )).quantize(fiftyPlacesOfDecimals)

print ('''
d1          = {}
ln_d1_      = {}
d2          = {}
ln_d2_      = {}
ln_product_ = {}
'''.format(
d1,ln_d1_ ,
d2,ln_d2_ ,
ln_product_ ,
))

if difference :  print ('''
difference  = {} ****
'''.format(
difference,
))


For example: During testing, successive invocations of the above code produced:

d1          = 3.300463847393627263496303126765085976697315885228780009201595937
ln_d1_      = 1.1940630184110798505583266934968432937656468440595029
d2          = 4.727915623201914684885711302927600487326893972103794963997766615
ln_d2_      = 1.5534844337520634527664958773360448454701186698422347
ln_product_ = 2.7475474521631433033248225708328881392357655139017377

d1          = 6.56429212435850275252301147228535243835226966080458915176241218
ln_d1_      = 1.8816446762531860392218213681767770852191644273705970
d2          = 8.15468991518212749204100104755219361919087392341006662123706307
ln_d2_      = 2.0985932114606734087366302984138612677420896519457258
ln_product_ = 3.9802378877138594479584516665906383529612540793163228