teaching:progappchim:math_nombres

Ceci est une ancienne révision du document !


Mathématiques et nombres

Quelques programmes et algorithmes reliés aux mathématiques et aux nombres.

Les calculs suivants renvoient des nombres avec des décimales bien particulières :
  • 1/9² = 0.0123456790123456790123456790123456790123456790123457…
  • 1/99² = 0.0001020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697990001020304050607080910111…

Quelle est l'explication de ces particularités. Comment manipuler de tels nombres et les construire ?

L'idée est de s'intéresser au développement en série de Taylor de 1/x² autour de a=1, ou de manière équivalente à la série de Maclaurin de $1/(1-x)^2$

Taylor, pour f(x) = 1/x² :

$$f(x)=\sum _{n=0}^{\infty}{\frac {f^{(n)}(a)}{n!}}(x-a)^{n}}=1-2(x-1)+3(x-1)^2−4(x-1)^3+5(x-1)^4+...$$

Maclaurin :

$$1/(1-x)^2 \approx 1 + 2x + 3x^2 + 4x^3 + 5x^4 + 6x^5 + 7x^6 + 8x^7 + 9x^8 + ...$$

Ce développement va introduire des décimales particulières si x = 0.1, 0.01 ou 0.001

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
'Nombres magiques' 100/81 (et 10000/9801) dont les valeurs montrent des décimales
consécutives
 
Librairie de multiprécision : http://mpmath.org/doc/current/basics.html
 
"""
 
from mpmath import mp # multiprecision library
n = 41
mp.dps = n
#mp.pretty = True
print('standard float value : ', 1/0.81)
 
print('Multiprécision :')
sumt = mp.mpf(0)
for i in range(40, 0, -1):
    t = mp.mpf(i) * (mp.mpf(1)/mp.mpf(10))**mp.mpf(i-1)
 
    sumt += t
    print(mp.nstr(t, n, strip_zeros=False, min_fixed=-n)[:n],
          mp.nstr(sumt, n, strip_zeros=False, min_fixed=-n)[:n])
 
print(100/mpf(9**2))                                                     
 
n = 51
mp.dps = n
#mp.pretty = True
print('standard float value : ', 1/0.9801)
 
print('Multiprécision :')
sumt = mp.mpf(0)
for i in range(25, 0, -1):
    t = mp.mpf(i) * (mp.mpf(1)/mp.mpf(100))**mp.mpf(i-1)
 
    sumt += t
    print(mp.nstr(t, n, strip_zeros=False, min_fixed=-n)[:n],
          mp.nstr(sumt, n, strip_zeros=False, min_fixed=-n)[:n])
 
print(10000/mpf(99**2))                                                     

standard float value : 1.2345679012345678

Multiprécision :

0.000000000000000000000000000000000000040 0.000000000000000000000000000000000000040 0.000000000000000000000000000000000000390 0.000000000000000000000000000000000000430 0.000000000000000000000000000000000003800 0.000000000000000000000000000000000004230 0.000000000000000000000000000000000037000 0.000000000000000000000000000000000041230 0.000000000000000000000000000000000360000 0.000000000000000000000000000000000401230 0.000000000000000000000000000000003500000 0.000000000000000000000000000000003901230 0.000000000000000000000000000000034000000 0.000000000000000000000000000000037901230 0.000000000000000000000000000000330000000 0.000000000000000000000000000000367901230 0.000000000000000000000000000003200000000 0.000000000000000000000000000003567901230 0.000000000000000000000000000031000000000 0.000000000000000000000000000034567901230 0.000000000000000000000000000300000000000 0.000000000000000000000000000334567901230 0.000000000000000000000000002900000000000 0.000000000000000000000000003234567901230 0.000000000000000000000000028000000000000 0.000000000000000000000000031234567901230 0.000000000000000000000000270000000000000 0.000000000000000000000000301234567901230 0.000000000000000000000002600000000000000 0.000000000000000000000002901234567901230 0.000000000000000000000025000000000000000 0.000000000000000000000027901234567901230 0.000000000000000000000240000000000000000 0.000000000000000000000267901234567901230 0.000000000000000000002300000000000000000 0.000000000000000000002567901234567901230 0.000000000000000000022000000000000000000 0.000000000000000000024567901234567901230 0.000000000000000000210000000000000000000 0.000000000000000000234567901234567901230 0.000000000000000002000000000000000000000 0.000000000000000002234567901234567901230 0.000000000000000019000000000000000000000 0.000000000000000021234567901234567901230 0.000000000000000180000000000000000000000 0.000000000000000201234567901234567901230 0.000000000000001700000000000000000000000 0.000000000000001901234567901234567901230 0.000000000000016000000000000000000000000 0.000000000000017901234567901234567901230 0.000000000000150000000000000000000000000 0.000000000000167901234567901234567901230 0.000000000001400000000000000000000000000 0.000000000001567901234567901234567901230 0.000000000013000000000000000000000000000 0.000000000014567901234567901234567901230 0.000000000120000000000000000000000000000 0.000000000134567901234567901234567901230 0.000000001100000000000000000000000000000 0.000000001234567901234567901234567901230 0.000000010000000000000000000000000000000 0.000000011234567901234567901234567901230 0.000000090000000000000000000000000000000 0.000000101234567901234567901234567901230 0.000000800000000000000000000000000000000 0.000000901234567901234567901234567901230 0.000007000000000000000000000000000000000 0.000007901234567901234567901234567901230 0.000060000000000000000000000000000000000 0.000067901234567901234567901234567901230 0.000500000000000000000000000000000000000 0.000567901234567901234567901234567901230 0.004000000000000000000000000000000000000 0.004567901234567901234567901234567901230 0.030000000000000000000000000000000000000 0.034567901234567901234567901234567901230 0.200000000000000000000000000000000000000 0.234567901234567901234567901234567901230 1.000000000000000000000000000000000000000 1.234567901234567901234567901234567901230

1.2345679012345679012345679012345679012346


standard float value : 1.0203040506070808

Multiprécision :

0.0000000000000000000000000000000000000000000000250 0.0000000000000000000000000000000000000000000000250 0.0000000000000000000000000000000000000000000024000 0.0000000000000000000000000000000000000000000024250 0.0000000000000000000000000000000000000000002300000 0.0000000000000000000000000000000000000000002324250 0.0000000000000000000000000000000000000000220000000 0.0000000000000000000000000000000000000000222324250 0.0000000000000000000000000000000000000021000000000 0.0000000000000000000000000000000000000021222324250 0.0000000000000000000000000000000000002000000000000 0.0000000000000000000000000000000000002021222324250 0.0000000000000000000000000000000000190000000000000 0.0000000000000000000000000000000000192021222324250 0.0000000000000000000000000000000018000000000000000 0.0000000000000000000000000000000018192021222324250 0.0000000000000000000000000000001700000000000000000 0.0000000000000000000000000000001718192021222324250 0.0000000000000000000000000000160000000000000000000 0.0000000000000000000000000000161718192021222324250 0.0000000000000000000000000015000000000000000000000 0.0000000000000000000000000015161718192021222324250 0.0000000000000000000000001400000000000000000000000 0.0000000000000000000000001415161718192021222324250 0.0000000000000000000000130000000000000000000000000 0.0000000000000000000000131415161718192021222324250 0.0000000000000000000012000000000000000000000000000 0.0000000000000000000012131415161718192021222324250 0.0000000000000000001100000000000000000000000000000 0.0000000000000000001112131415161718192021222324250 0.0000000000000000100000000000000000000000000000000 0.0000000000000000101112131415161718192021222324250 0.0000000000000009000000000000000000000000000000000 0.0000000000000009101112131415161718192021222324250 0.0000000000000800000000000000000000000000000000000 0.0000000000000809101112131415161718192021222324250 0.0000000000070000000000000000000000000000000000000 0.0000000000070809101112131415161718192021222324250 0.0000000006000000000000000000000000000000000000000 0.0000000006070809101112131415161718192021222324250 0.0000000500000000000000000000000000000000000000000 0.0000000506070809101112131415161718192021222324250 0.0000040000000000000000000000000000000000000000000 0.0000040506070809101112131415161718192021222324250 0.0003000000000000000000000000000000000000000000000 0.0003040506070809101112131415161718192021222324250 0.0200000000000000000000000000000000000000000000000 0.0203040506070809101112131415161718192021222324250 1.0000000000000000000000000000000000000000000000000 1.0203040506070809101112131415161718192021222324250

1.02030405060708091011121314151617181920212223242526

Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus
  • teaching/progappchim/math_nombres.1579006681.txt.gz
  • Dernière modification : 2020/01/14 13:58
  • de villersd