101 count = 0
105 for i = 0 to 20
106 print
107 next i
110 Dim x2(7),sign(7), dx(7)
120 Rem Init some vars
125 aminerr=1000
130 rem res = 8.5e-17
132 res = 1e-4
200 xpi=3.14159265358979323846
250 rem 8 coefs here
255 Rem elementary charge (e)-0
260 x2(0)=1.60217662e-19
265 Rem Planck's constant (h)-1
300 x2(1)=6.62607004e-34
350 rem eletron mass (Me)-2
400 x2(2)=9.109383560899034e-31
450 Rem Proton radius (Rp)-3
500 x2(3)=8.41235640479985e-16
550 Rem Rydberg Constant (R_H or R_{\infty})-4
600 x2(4)=10973731.5685083
610 Rem Permittivity of free space (e0)-5
620 x2(5)=8.854187817e-12
701 Rem Speed of Light (c)-6
702 x2(6)=299792458.0
703 Rem Proton mass (Mp)-7
704 x2(7)=1.672621898209999e-27
710 For i = 0 to 6
720 sign(i)=0
730 dx(i) = 0.01*res*(x2(i))
740 next i
750 Rem define bit to be twiddled here
755 sign(0)=1
760 sign(1)=1
770 sign(2)=1
780 sign(3)=1
790 sign(4)=1
795 sign(5)=1
797 sign(6)=1
1000 rem starting error
1010 xerr1=x2(2)*x2(0)^4/(8*x2(6)*x2(5)^2*x2(1)^3*x2(4))
1015 yerr2=-xpi*x2(3)*x2(6)*x2(2)/(2*x2(1))
1017 err = xerr1 + yerr2 - 1.0
1020 digits=int(-log(abs(yerr+0.00001))/log(10)+0.5)
1030 Print "Starting err is: ";err
1032 Print "Starting xerr1 is: ";xerr1
1034 Print "Starting yerr2 is: ";yerr2
1040 print "Digits resolution ";digits
1050 print "aminerr error is: ";aminerr
1060 for i = 0 to 6
1061 print "i= ";i, x2(i)
1062 next i
1100 print "pi= ";xpi
1111 rem end
2000 Rem Main Loop
2010 For i = 0 to 6
2020 x2(i)=x2(i)+sign(i)*dx(i)
2030 xerr1=x2(2)*x2(0)^4/(8*x2(6)*x2(5)^2*x2(1)^3*x2(4))
2032 yerr2=-xpi*x2(3)*x2(6)*x2(2)/(2*x2(1))-1.0
2034 err=abs(xerr1+yerr2)
2035 if err>aminerr then sign(i)=-1*sign(i)
2037 if err<aminerr then aminerr = err
2040 next i
2050 if err < 1.5*res then goto 5000
2055 print "Working ";err
2058 count = count+1
2060 goto 2000
5000 Rem
5001 xresstop=2e-15
5002 if res > xresstop then res = res/10.0
5010 For i = 0 to 6
5030 dx(i) = 0.01*res*(x2(i))
5040 next i
5100 if res > xresstop then goto 2000
5106 Print "Done."
5107 print "Coef "
5109 for i = 0 to 7
5110 print x2(i);" "
5120 next i
6000 rem Final error
6010 xerr1=(x2(2)*x2(0)^4)/(8*x2(6)*x2(5)^2*x2(1)^3*x2(4))
6012 yerr2=-xpi*x2(3)*x2(6)*x2(2)/(2*x2(1)) - 1.0
6014 err=abs(xerr1+yerr2)
6020 digits=int(-log(abs(err+1e-16))/log(10)+0.5)
6030 Print "Starting err is: ";err
6040 print "Digits resolution ";digits
6050 print "Final error is: ";aminerr
6060 print "Iterations= ";count
6070 print xpi;" <-ideal"
6080 print xpi+err;" <-calc'd
6085 print "Calc'd proton mass= ";2*x2(1)/(xpi*x2(3)*x2(6))
6087 print "Input proton mass= ";x2(7)
6090 print "Proton/electron mass ratio=";x2(7)/x2(2)
6100 end
Cut and paste into this online basic interpreter: https://www.calormen.com/jsbasic/
ReplyDeleteIt takes a couple of minutes to run.
ReplyDeleteIt generates all important physics constants based on a numerical solution to a polynomial - the full Rydberg equation, which includes the proton to electron mass ratio.
ReplyDeleteThe Oracle says!
ReplyDeleteThe point of this code is to show the sign-flip algorithm to solve the polynomial.
ReplyDeleteI think there is an error in the initial error report. Left it in there so see if anyone would notice, I think.
ReplyDeleteWhy spend BILLIONS on physics clowns when you can get your coefficients for free!
ReplyDeleteI like how the code runs and runs and then barfs out all these numbers.
ReplyDeleteAnd to then peruse through them like a Troll opening a treasure chest! I mean look at the speed of light and do some ancient numerology on that!
ReplyDeletePosted on President Reagan's birthday.
ReplyDelete