triangle de Pascal et nombres négatifs

Bonsoir à tous.
J'ai fait fonctionner le programme suivant en python. Il donne le triangle de Pascal. À la 34ème étape, on peut observer des nombres négatifs.
L'ordinateur me renvoie bien un message d'erreur :
RuntimeWarning: overflow encountered in long_scalars
  a[ i,j]=a[ i-1,j-1]+a[ i-1,j]
mais il calcule tout de même et donne des résultats fantaisistes. Je m'attendais plutôt : "Les nombres sont trop grands, j'arrête de calculer"
Merci d'avance pour vos réponses.
import numpy as np
N=40
a=np.zeros((N,N),int)
print(a[0,0])
for i in range (N):
    a[ i,0]=1
    a[ i,i]=1
for i in range(2,N):
    for j in range (1,i):
        a[ i,j]=a[ i-1,j-1]+a[ i-1,j]
for i in range (N):
    print((a[ i][0:i+1]))

[Écrire du python sans indentation, c'est incompréhensible. AD]

Réponses

  • Bonsoir Bobby,

    C'est parce que Python est un langage laxiste.

    Tout ça n'arriverait pas si tu programmais le triangle de Python en Pascal.

    e.v.
    Personne n'a raison contre un enfant qui pleure.


  • On peut faire apparaître de vrais nombres négatifs si l'on prolonge le triangle de Pascal vers le haut.
  • C'est probablement parce que les entiers de numpy sont bornés, contrairement aux entiers de Python.
    Sur ce site, je ne rencontre pas ton problème.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Le programme s’exécute sans problème sur ma machine mais avec N=80 le même problème apparait.

    La limitation vient de a=np.zeros((N,N),int)
    Ta machine est en 32 bits et la mienne en 64 est le problème se manifeste plus tard.

    Il faut écrire a=np.zeros((N,N),dtype='object') pour que cela marche.
  • Merci pour vos réponses.
    ev : j'aime beaucoup " le triangle de Python en Pascal";-)
    AD : merci d'avoir réécrit le programme avec indentation. J'avais essayé de le mettre en PJ mais cela n'a pas été accepté. Le copier-coller m'a fait perdre l'indentation. Désolé.
    Chaurien : je ne connaissais pas. Merci
    nicolas.patrois et soleil_vert : vous avez raison, int : c'est du 32 bits. J'ai codé en 64 : je peux aller plus loin.

    Bonne soirée
    Robert
Connectez-vous ou Inscrivez-vous pour répondre.