Bonjour à tous,
Comment peut faire pour calculer :
exp(1000) ???
avec matlab.
Car il est bloqué à partir du nombre (realmax = 10^308).
et merci.
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
Calcul numérique de processus industriels
Formation, conseil, développement
Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)
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ésultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2from math import exp print exp(100)
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ésultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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+434
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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ésultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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+4341.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.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 ?À 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)
Mais bo, sur ma machine :
Même si tu essaye de contourner cette limitation, comme par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !
Les règles Les cours La fonction rechercher
N'oubliez pas de mettre en et de voter.
La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !
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 ?
>> 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.7827
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >> log(realmax)/log(exp(1)) ans = 709.7827
Les règles Les cours La fonction rechercher
N'oubliez pas de mettre en et de voter.
La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager