Bonjour à tous,
Comment peut faire pour calculer :
exp(1000) ???
avec matlab.
Car il est bloqué à partir du nombre (realmax = 10^308).
et merci.
Version imprimable
Bonjour à tous,
Comment peut faire pour calculer :
exp(1000) ???
avec matlab.
Car il est bloqué à partir du nombre (realmax = 10^308).
et merci.
Salut!
Aucun rapport avec Matlab: ça tient aux caractéristiques de ton processeur. Avant d'essayer de calculer quoi que ce soit, tu devrais prendre connaissance de la norme ANSI/IEEE 754.
A part ça, à quoi cela sert-il de calculer exp(1000)?
Jean-Marc Blanc
merci pour votre réponse,
je calcule exp(1000) pour le calcul de sinh(1000).
pour cela je dois passer le nombre maximal proposé par le programme (matlab) dont la précision de type (Double) est limité avec realmax.
la question est : comment peut passer à une autre classe exple (2*realmax) ??
En Python, il suffit d’utiliser la fonction exponentielle du module math pour obtenir par exemple e puissance 100:
résultatCode:
1
2from math import exp print exp(100)
Citation:
2.68811714182e+43
Mais exp(1000) sort des capacités de exp() du module math.
print exp(709.782) donne encore 1.79641202802e+308
mais print exp(709.783) donne l’erreur
OverflowError: math range error
Qu’à cela ne tienne,
résultatCode:
1
2
3
4
5
6
7
8 from math import exp x = exp(500) print x print str(x) # transforme en chaine print str(x)[:-5] # enleve les 5 derniers caracteres = 'e+217' y = float(str(x)[:-5]) # retransforme en float la chaine sans 'e+217' print y*y
Donc exp(1000) est 1.97007111401e+434Code:
1
2
3
4 1.40359221785e+217 1.40359221785e+217 1.40359221785 1.97007111401
On le refait d’une autre manière pour voir si ce serait fortement différent:
résultatCode:
1
2
3
4
5
6
7 from math import exp a = exp(700) b = exp(300) print a print b print float(str(a)[:-5]) * float(str(b)[:-5])
Donc exp(1000) est 1.97007111403e+434Citation:
1.01423205474e+304
1.94242639524e+130
1.97007111403
Par contre je ne sais pas si et comment il serait possible d’obtenir plus de chiffres significatifs.
Les capacités de Python de base pour les nombres entiers sont illimitées; par exemple:
1032**196 (1032 à la puissance 196) est
Mais exp(1000) est un nombre décimal.Citation:
47997726761100350025041056233911194221331253580220209003777677
42920947244984722962818695487413201001402321774804914833304385
67393990258286657318575462149433232996628079009541578768909308
06783114545720952448001416815095387023074946542232470156441367
95936869071073549404099420354008343437770055249012060227533223
94008921599141542330100980024351377910809495135598556370802030
76744681496970123464200765817659628128078823201427125460193604
44588706506447065078339327023340821212628026452167601069308829
45853894822136421928085843444732220202549141968217374435570786
255702667321337111363021938098176
Il y a un module “decimal“ dans Python qui permet de faire des choses plus poussées. Sans doute, avec des manipulations et des astuces mathématiques, arriverait-on à obtenir plus de chiffres significatifs.
Mais même avec Python, la question posée par FR119492 finit par réclamer réponse:
Faire de l'astronomie ?Citation:
À part ça, à quoi cela sert-il de calculer exp(1000)?
PS
Je viens de voir que tu avais déjà mis une réponse.
À propos du nombre de chiffres obtenus pour la représentation de exp(1000):
de toutes façons, il s’agit de savoir si la fonction à laquelle on fournit exp(1000) est capable de tenir compte de tous les chiffres.
merci.
et j'applique votre méthode pour mon calcul.
En complément à "FR119492", je ne vois pas vraiment en quoi consiste le calcul de exp(1000) :koi:
Mais bo, sur ma machine :
Même si tu essaye de contourner cette limitation, comme par exemple :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 >> exp(709.782) ans = 1.7964e+308 >> exp(1000) ans = Inf
Tu dépasse la valeur maximale tolérée par ta machine (et non par matlab).Code:
1
2
3
4
5
6
7 >> exp(500)*exp(500) ans = Inf
Donc tu as deux solutions :
1. Trouver une machine qui soit un peu plus musclée que celle-là !
2. Baisser les bras !
A près avoir bien réfléchie, je te propose de modifier ta question par :
Quelle est la valeur maximal dont je peux calculer l'exponentielle ?
Citation:
>> exp(x) = realmax
=> log(exp(x)) = log(realmax)
=> x.log(exp(1)) = log(realmax)
=> x = log(realmax)/log(exp(1))
=> x = selon la machine dont tu exécutes la commande
La valeur extrême que je peux calculer l'exponentielle sur ma machin est de 709.7827Code:
1
2
3
4
5
6 >> log(realmax)/log(exp(1)) ans = 709.7827
Maple donne la réponse avec une précision arbitraire
exp(1000) = 1.9700711140170469939 10^434
sinh(1000) = 9.8503555700852349694 10^433
Mais on peut très facilement faire le calcul en passant par le log à base 10:
log10(exp(1000)) = Ln(exp(1000))/Ln(10) =1000/Ln(10) =1000/2.302585093 = 434.2944819
Donc
exp(1000) = 10^434.2944819= (10^0.2944819)*(10^434)
La mantisse s'évalue avec n'importe quel outil actuel (Matlab, Calculatrice de poche, Excel) ou ancien (règle à calcul, table de logarithmes de Laborde)
10^0.2944819 = 1.970071114