Copyright (C) 2010-2020 Luke Olson
Copyright (C) 2020 Andreas Kloeckner
You may know from math that $$ \sum_{n=1}^\infty \frac 1n=\infty. $$ Let's see what we get using floating point:
import numpy as np
n = int(0)
float_type = np.float32
my_sum = float_type(0)
while True:
n += 1
last_sum = my_sum
my_sum += float_type(1 / n)
if n % 200000 == 0:
print("1/n = %g, sum0 = %g"%(1.0/n, my_sum))
1/n = 5e-06, sum0 = 12.7828 1/n = 2.5e-06, sum0 = 13.4814 1/n = 1.66667e-06, sum0 = 13.8814 1/n = 1.25e-06, sum0 = 14.1666 1/n = 1e-06, sum0 = 14.3574 1/n = 8.33333e-07, sum0 = 14.5481 1/n = 7.14286e-07, sum0 = 14.7388 1/n = 6.25e-07, sum0 = 14.9296 1/n = 5.55556e-07, sum0 = 15.1203 1/n = 5e-07, sum0 = 15.311 1/n = 4.54545e-07, sum0 = 15.4037 1/n = 4.16667e-07, sum0 = 15.4037 1/n = 3.84615e-07, sum0 = 15.4037 1/n = 3.57143e-07, sum0 = 15.4037 1/n = 3.33333e-07, sum0 = 15.4037 1/n = 3.125e-07, sum0 = 15.4037 1/n = 2.94118e-07, sum0 = 15.4037 1/n = 2.77778e-07, sum0 = 15.4037 1/n = 2.63158e-07, sum0 = 15.4037 1/n = 2.5e-07, sum0 = 15.4037 1/n = 2.38095e-07, sum0 = 15.4037 1/n = 2.27273e-07, sum0 = 15.4037 1/n = 2.17391e-07, sum0 = 15.4037 1/n = 2.08333e-07, sum0 = 15.4037 1/n = 2e-07, sum0 = 15.4037 1/n = 1.92308e-07, sum0 = 15.4037 1/n = 1.85185e-07, sum0 = 15.4037 1/n = 1.78571e-07, sum0 = 15.4037 1/n = 1.72414e-07, sum0 = 15.4037 1/n = 1.66667e-07, sum0 = 15.4037 1/n = 1.6129e-07, sum0 = 15.4037 1/n = 1.5625e-07, sum0 = 15.4037 1/n = 1.51515e-07, sum0 = 15.4037 1/n = 1.47059e-07, sum0 = 15.4037 1/n = 1.42857e-07, sum0 = 15.4037 1/n = 1.38889e-07, sum0 = 15.4037 1/n = 1.35135e-07, sum0 = 15.4037 1/n = 1.31579e-07, sum0 = 15.4037 1/n = 1.28205e-07, sum0 = 15.4037 1/n = 1.25e-07, sum0 = 15.4037 1/n = 1.21951e-07, sum0 = 15.4037 1/n = 1.19048e-07, sum0 = 15.4037 1/n = 1.16279e-07, sum0 = 15.4037 1/n = 1.13636e-07, sum0 = 15.4037 1/n = 1.11111e-07, sum0 = 15.4037 1/n = 1.08696e-07, sum0 = 15.4037 1/n = 1.06383e-07, sum0 = 15.4037 1/n = 1.04167e-07, sum0 = 15.4037 1/n = 1.02041e-07, sum0 = 15.4037 1/n = 1e-07, sum0 = 15.4037 1/n = 9.80392e-08, sum0 = 15.4037 1/n = 9.61538e-08, sum0 = 15.4037 1/n = 9.43396e-08, sum0 = 15.4037 1/n = 9.25926e-08, sum0 = 15.4037 1/n = 9.09091e-08, sum0 = 15.4037 1/n = 8.92857e-08, sum0 = 15.4037 1/n = 8.77193e-08, sum0 = 15.4037 1/n = 8.62069e-08, sum0 = 15.4037 1/n = 8.47458e-08, sum0 = 15.4037 1/n = 8.33333e-08, sum0 = 15.4037 1/n = 8.19672e-08, sum0 = 15.4037 1/n = 8.06452e-08, sum0 = 15.4037 1/n = 7.93651e-08, sum0 = 15.4037 1/n = 7.8125e-08, sum0 = 15.4037 1/n = 7.69231e-08, sum0 = 15.4037 1/n = 7.57576e-08, sum0 = 15.4037 1/n = 7.46269e-08, sum0 = 15.4037 1/n = 7.35294e-08, sum0 = 15.4037 1/n = 7.24638e-08, sum0 = 15.4037 1/n = 7.14286e-08, sum0 = 15.4037 1/n = 7.04225e-08, sum0 = 15.4037 1/n = 6.94444e-08, sum0 = 15.4037 1/n = 6.84932e-08, sum0 = 15.4037 1/n = 6.75676e-08, sum0 = 15.4037 1/n = 6.66667e-08, sum0 = 15.4037 1/n = 6.57895e-08, sum0 = 15.4037 1/n = 6.49351e-08, sum0 = 15.4037 1/n = 6.41026e-08, sum0 = 15.4037 1/n = 6.32911e-08, sum0 = 15.4037 1/n = 6.25e-08, sum0 = 15.4037 1/n = 6.17284e-08, sum0 = 15.4037 1/n = 6.09756e-08, sum0 = 15.4037 1/n = 6.0241e-08, sum0 = 15.4037 1/n = 5.95238e-08, sum0 = 15.4037 1/n = 5.88235e-08, sum0 = 15.4037
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) <ipython-input-2-ba1bc8ebcccd> in <module> 8 n += 1 9 last_sum = my_sum ---> 10 my_sum += float_type(1 / n) 11 12 if n % 200000 == 0: KeyboardInterrupt: