I apologize for being away for awhile. I have been pretty busy post covid. There's a lot of work I have to get back to. So I haven't had time to do the hard tetration work I'd like to. I've been working on a new paper, and part of this paper justifies the code I talk about in this post. This code relies extraordinarily on Bo's and Gottfried's observations, though you won't see that.
To begin, this program is designed to calculate one thing and one thing only.
Let's let:
\[
f(z) = e^z -1\\
\]
And let's let:
\[
f^{\circ s}(z) : \mathbb{C}_{\Re(s) > 0} \times \mathbb{C}/[0,\infty) \to \mathbb{C}/[0,\infty)\\
\]
I have written, not a perfect algorithm, but a very efficient algorithm--to evaluate this function. Now my code algorithms are different from most of what is written about here, but are incredibly convenient if you know how to use them. I promise I will release a nice article which relates all my work in a month or so.
To begin, before diving into the entire construct; this code is accurate to 13 decimal points, and to get more decimal points, requires an overhaul of this code. It is possible to tweak my code to get 100 decimal points, but it requires a lot of fucking ram. And it requires treating much larger taylor series than I already treat. I capped everything at 13 digits, as this is a theoretical discovery more than anything. Please play with me here.
Here is the code:
We run this code in Pari-gp, where it acts as a calculator. I'll give a rough run down of the code:
We start this by writing:
These Taylor values are divergent, the same way Gottfried and Bo talked about. It's just way better in this form. This code, read the code above, and then ran the initialization of \(\vartheta\).
From here we have two functions; we have \(f(z) = e^z-1\) and \(f^{\circ s}(z)\). Where \(z\) is valid for \(z\not\in [0,\infty)\) and \(\Re(s) > 0\). Additionally all code is valid to 13 digits at least.
From here, we call \(F(s,z) = f^{\circ s}(z)\). I'll spend a bit describing how to use this function.
This evaluates \(f^{\circ 0.5}(f^{\circ 0.5}(-5+i)) = e^{-5 + i} -1\), which is accurate to 13 digits.
The function
takes an argument \(\Re(s) > 0\) and \(z\not \in [0,\infty)\). We have at least 13 digit accuracy in the digit precision of this semi group. Additionally, we have 13 digit accuracy in the taylor series.
Let's try expanding:
\[
f^{\circ 0.5}(z-5+i) = h(z)\\
\]
We'd write this as:
This produces a perfect taylor series, which is at least accurate to 13 digits.
What if we want the taylor series in the opposite direction? What if I write:
\[
f^{\circ 1+s}(-5+i)\\
\]
And I want the taylor expansion in \(s\)?
These are again, accurate to about 13 digits. Even in the late coefficients.
We can even go even further and pull a multivariable taylor series:
\[
f^{\circ 1+s}(z-5+i)\\
\]
All in all, this is a really good tool for \(f(z) = e^z-1\), and for all of its iterates. But it is a slightly lower precision construction. I have attached the pari gp tool.
Fuck em up boyz!
neutral_int.gp (Size: 585 bytes / Downloads: 255)
To begin, this program is designed to calculate one thing and one thing only.
Let's let:
\[
f(z) = e^z -1\\
\]
And let's let:
\[
f^{\circ s}(z) : \mathbb{C}_{\Re(s) > 0} \times \mathbb{C}/[0,\infty) \to \mathbb{C}/[0,\infty)\\
\]
I have written, not a perfect algorithm, but a very efficient algorithm--to evaluate this function. Now my code algorithms are different from most of what is written about here, but are incredibly convenient if you know how to use them. I promise I will release a nice article which relates all my work in a month or so.
To begin, before diving into the entire construct; this code is accurate to 13 decimal points, and to get more decimal points, requires an overhaul of this code. It is possible to tweak my code to get 100 decimal points, but it requires a lot of fucking ram. And it requires treating much larger taylor series than I already treat. I capped everything at 13 digits, as this is a theoretical discovery more than anything. Please play with me here.
Here is the code:
Code:
\p 50
\ps 20
Const(poly) = {
my(vars = variables(poly));
substvec(poly, vars, vector(#vars));
};
f(z) = exp(z) - 1;
iter_f(n,z) = {
if(n==0, z,
Pol(f(iter_f(n-1,z)),z);
);
};
init_vartheta({LIMIT=300}) = {
BASE = sum(n=0,LIMIT,Pol(iter_f(n+1,z),z)*(-x)^n/factorial(n));
};
F(s,y) = {
if(s==1, return(f(y)));
if(Const(s)>1, F(s-1,f(y)),
if(abs(Const(y))<0.05,
(1/gamma(1-s))*(sum(n=0,300, subst(iter_f(n+1,z),z,y)*(-1)^n/(factorial(n)*(1+n-s))) + intnum(X=1,90,subst(subst(BASE,x,X),z,y)*X^(-s))),
log(F(s,f(y)) + 1)
)
);
};
We run this code in Pari-gp, where it acts as a calculator. I'll give a rough run down of the code:
We start this by writing:
Code:
\r neutral_int
init_vartheta()
GP/PARI CALCULATOR Version 2.13.2 (released)
amd64 running mingw (x86-64/GMP-6.1.2 kernel) 64-bit version
compiled: Jun 10 2021, gcc version 8.3-posix 20190406 (GCC)
threading engine: single
(readline v8.0 disabled, extended help enabled)
Copyright (C) 2000-2020 The PARI Group
PARI/GP is free software, covered by the GNU General Public License, and comes
WITHOUT ANY WARRANTY WHATSOEVER.
Type ? for help, \q to quit.
Type ?17 for how to get moral (and possibly technical) support.
parisizemax = 3000000000, primelimit = 500000
realprecision = 57 significant digits (50 digits displayed)
seriesprecision = 20 significant terms
%6 = (7.3124522221141931945873965423489781850870963336375 E-574*z^20 + 4.8776641577580803165997457076259405952006870791110 E-576*z^19 + 3.2533729371585239861252793578076839333642436527966 E-578*z^18 + 2.1698381028845785190912405551606111538850924034236 E-580*z^17 + 1.4470734195083639760114636923270112313333833413846 E-582*z^16 + 9.6498718463090253371361871330158177146488344742966 E-585*z^15 + 6.4345469484715300226050838546265794266461049531099 E-587*z^14 + 4.2901966756256620121086824394762639526571841493871 E-589*z^13 + 2.8601982722689581947419466107731984641405981829792 E-591*z^12 + 1.9066506966376583109223165588593100135056802136581 E-593*z^11 + 1.2708602917968835452795860344260753111502911809426 E-595*z^10 + 8.4697542120625621748490806146107026700881852065906 E-598*z^9 + 5.6439536224722981518853895350062310010105217671656 E-600*z^8 + 3.7603398308175438781868992276092586249171876491427 E-602*z^7 + 2.5048995559479616592645703228743438043732892424379 E-604*z^6 + 1.6682343079708266464423028467933492903021662807954 E-606*z^5 + 1.1107165013033971231837564220368316028037815124859 E-608*z^4 + 7.3924559154968194554659329253699274729037039100560 E-611*z^3 + 4.9173764404635162674939686864988431083616655720994 E-613*z^2 + 3.2673597611053264235840323498331183444263558618600 E-615*z)*x^300 + (-2.0589547720821092060786223192151143959240060383760 E-571*z^20 - 1.3779914826472309568294107919635582483482636490661 E-573*z^19 - 9.2218758582917270562944692905636679807443162207638 E-576*z^18 - 6.1711121739999530177255076282387244935981321050957 E-578*z^17 - 4.1293078519937848457489908731271917325970331298606 E-580*z^16 - 2.7628589866638515934497565556810800983915286426183 E-582*z^15 - 1.8484406465819516637405603795846618804829672385618 E-584*z^14 - 1.2365593781076561456034845471595071306486740782974 E-586*z^13 - 8.2714950840113874438767279000894870655299064782632 E-589*z^12 - 5.5323413394245904725289968268135134676405323003597 E-591*z^11 - 3.699861227636877896616633708095127345018[+++]
These Taylor values are divergent, the same way Gottfried and Bo talked about. It's just way better in this form. This code, read the code above, and then ran the initialization of \(\vartheta\).
From here we have two functions; we have \(f(z) = e^z-1\) and \(f^{\circ s}(z)\). Where \(z\) is valid for \(z\not\in [0,\infty)\) and \(\Re(s) > 0\). Additionally all code is valid to 13 digits at least.
From here, we call \(F(s,z) = f^{\circ s}(z)\). I'll spend a bit describing how to use this function.
Code:
F(0.5,F(0.5,-5+I))
%7 = -0.99635947169836762192725358390433494253623663552745 + 0.0056697868968831960894314416400933210717550792617893*I
f(-5+I)
%8 = -0.99635947169957680983203733901585094813263971484423 + 0.0056697868969038589404768188791737542163949162730891*I
This evaluates \(f^{\circ 0.5}(f^{\circ 0.5}(-5+i)) = e^{-5 + i} -1\), which is accurate to 13 digits.
The function
Code:
F(s,z)
takes an argument \(\Re(s) > 0\) and \(z\not \in [0,\infty)\). We have at least 13 digit accuracy in the digit precision of this semi group. Additionally, we have 13 digit accuracy in the taylor series.
Let's try expanding:
\[
f^{\circ 0.5}(z-5+i) = h(z)\\
\]
We'd write this as:
Code:
F(0.5,z-5+I)
%9 = (-1.4656748902284050870504481862537795117671444246461 + 0.013883663470269166110664749712091909975949044350577*I) + (0.0090552475535492909792479328232154641781195015743980 + 0.013791788086198760462199343906524092446614863468969*I)*z + (0.0045670178028367387071314821117573918515789937225712 + 0.0068041753533976256135561527057713296047659865352235*I)*z^2 + (0.0015476865068734175206106841571398528403105012863369 + 0.0022070765928811747955236233464310513021430501476307*I)*z^3 + (0.00039891543892133659548658340989669165569996938228453 + 0.00052140830231873072442992810627522686362712867239751*I)*z^4 + (8.4178174236866631903867457930707359218420844461063 E-5 + 9.2220969676350184272646106150840043596397895758635 E-5*I)*z^5 + (1.5297155692229718205929575150684078516045300547506 E-5 + 1.1395397338723591211620539015417303944240961887947 E-5*I)*z^6 + (2.4648659933433487006503562525188591833685417639558 E-6 + 5.1377007877187693499137867370832521899136010774460 E-7*I)*z^7 + (3.4808960611572283953358417653324009343919347206223 E-7 - 2.0528161657762188628631661516172178141919335211807 E-7*I)*z^8 + (3.8065304843361262020434116594035191636557801219975 E-8 - 7.9278413908388873487851724824603493615481918735897 E-8*I)*z^9 + (1.0262817647647246718140355878199687007495381069315 E-9 - 1.8042710996946409674216037570469209013672633186364 E-8*I)*z^10 + (-1.0671844118504040416472747693791047833813058467303 E-9 - 3.1069505116746984305164580175645155123873173268737 E-9*I)*z^11 + (-4.2264043416520561526591337823459060486928937586240 E-10 - 3.9529446327467605097430462476720645209437537948999 E-10*I)*z^12 + (-1.0898912674485696287799509959338396278648791985816 E-10 - 2.2577638080132273808895439521968670601373004378094 E-11*I)*z^13 + (-2.2035809700737663175818097198090007249431422665734 E-11 + 6.5314195869655575147470127053405308248805299942984 E-12*I)*z^14 + (-3.4919297780828299609990518244588393208166940017650 E-12 + 3.0720461691049833172482387788303336124354214938314 E-12*I)*z^15 + (-3.6[+++]
This produces a perfect taylor series, which is at least accurate to 13 digits.
What if we want the taylor series in the opposite direction? What if I write:
\[
f^{\circ 1+s}(-5+i)\\
\]
And I want the taylor expansion in \(s\)?
Code:
F(1+s,-5+I)
%10 = (-0.99635947169957680983203733901585094813263971021027 + 0.0056697868969038589404768188791737542163949161932332*I) + (0.60609216070061100500241466679407467098619430745279 - 0.0077250176109846098808165311553651411366060097011257*I)*s + (-0.41285028279167336813051969083342279733530972881951 + 0.0085229886404815413973422399150977622926380796272986*I)*s^2 + (0.30361358186710751566577626629756404923298178075460 - 0.0088325861081141740647195757373726384677017469326918*I)*s^3 + (-0.23592873968303340883809953707678661516971746042177 + 0.0089393169567161129394010205581945137928297062420063*I)*s^4 + (0.19096956817462706430587704934303355783481085371569 - 0.0089579585981148333632972715609138607712393768297543*I)*s^5 + (-0.15941854364830271813160499945837995038600880161538 + 0.0089371693479168984622390162313503272080243708731951*I)*s^6 + (0.13627260246566502697860348729434647969007037592224 - 0.0088983577138788008294310695249194978698704662348583*I)*s^7 + (-0.11866604910316757419904248700380406228603171508754 + 0.0088511979829179419033345860406703144298817967817887*I)*s^8 + (0.10486744079874876669911988681960690660290618205919 - 0.0088001486751402172736197048996441755078019630054121*I)*s^9 + (-0.093782151116666434801974278707266098008872239799289 + 0.0087472952687562274893120367856051516580193915156286*I)*s^10 + (0.084690536770248759102663212872320243928606350730621 - 0.0086936246561684599598210394520297784162250142416144*I)*s^11 + (-0.077103048723103474748768233212747741749936145681226 + 0.0086396084404931198323320526587606607844820231484328*I)*s^12 + (0.070676531038672679007430968970104655489191639418639 - 0.0085854740979227678667229120529134109538809774911364*I)*s^13 + (-0.065164008098491834925836344345463460612349983669567 + 0.0085313325433693449367454469441149262933119729525905*I)*s^14 + (0.060383533528453698516558823626929372468072953883903 - 0.0084772386944008324064901157778848674038011565110348*I)*s^15 + (-0.056198273129911454863841818316929817054507395990904[+++]
These are again, accurate to about 13 digits. Even in the late coefficients.
We can even go even further and pull a multivariable taylor series:
\[
f^{\circ 1+s}(z-5+i)\\
\]
Code:
F(1+s,z-5+I)
Reading GPRC: C:\Program Files (x86)\Pari64-2-13-2\/gprc.txt
GPRC Done.
*** _*_: Warning: increasing stack size to 16000000.
*** Warning: increasing stack size to 32000000.
*** Warning: increasing stack size to 64000000.
%11 = ((-0.99635947169957680983203733901585094813263971021027 + 0.0056697868969038589404768188791737542163949161932332*I) + (0.60609216070061100500241466679407467098619430745279 - 0.0077250176109846098808165311553651411366060097011257*I)*s + (-0.41285028279167336813051969083342279733530972881951 + 0.0085229886404815413973422399150977622926380796272986*I)*s^2 + (0.30361358186710751566577626629756404923298178075460 - 0.0088325861081141740647195757373726384677017469326918*I)*s^3 + (-0.23592873968303340883809953707678661516971746042177 + 0.0089393169567161129394010205581945137928297062420063*I)*s^4 + (0.19096956817462706430587704934303355783481085371569 - 0.0089579585981148333632972715609138607712393768297543*I)*s^5 + (-0.15941854364830271813160499945837995038600880161538 + 0.0089371693479168984622390162313503272080243708731951*I)*s^6 + (0.13627260246566502697860348729434647969007037592224 - 0.0088983577138788008294310695249194978698704662348583*I)*s^7 + (-0.11866604910316757419904248700380406228603171508754 + 0.0088511979829179419033345860406703144298817967817887*I)*s^8 + (0.10486744079874876669911988681960690660290618205919 - 0.0088001486751402172736197048996441755078019630054121*I)*s^9 + (-0.093782151116666434801974278707266098008872239799289 + 0.0087472952687562274893120367856051516580193915156286*I)*s^10 + (0.084690536770248759102663212872320243928606350730621 - 0.0086936246561684599598210394520297784162250142416144*I)*s^11 + (-0.077103048723103474748768233212747741749936145681226 + 0.0086396084404931198323320526587606607844820231484328*I)*s^12 + (0.070676531038672679007430968970104655489191639418639 - 0.0085854740979227678667229120529134109538809774911364*I)*s^13 + (-0.065164008098491834925836344345463460612349983669567 + 0.0085313325433693449367454469441149262933119729525905*I)*s^14 + (0.060383533528453698516558823626929372468072953883903 - 0.0084772386944008324064901157778848674038011565110348*I)*s^15 + (-0.05619827312991145486384181831692981705450739599090[+++]
All in all, this is a really good tool for \(f(z) = e^z-1\), and for all of its iterates. But it is a slightly lower precision construction. I have attached the pari gp tool.
Fuck em up boyz!
neutral_int.gp (Size: 585 bytes / Downloads: 255)