2 votes

Niveau de signification Python Math

Je charge deux valeurs à partir d'un ensemble de données.

x1=5.904e-16

y

x1=1.048576e-14

Je vous accorde que ce sont des chiffres minuscules, mais tout ce que je veux, c'est en faire la moyenne.

avg = 1/2*(x1+x2)

mais cela donne avg = 0

Arr !

4voto

Volatility Points 12668

Je suppose que vous utilisez Python 2.

Lorsque les deux arguments sont des entiers, Python 2 utilise division de nombres entiers ce qui signifie que le résultat sera également un nombre entier. Par exemple :

print 1/2
# 0
print 5/2
# 2

Pour y remédier, il faut utiliser l'équivalent flottant ( 0.5 ), ou changer l'un des arguments de la division (soit 1 ou 2 n'a pas d'importance) en un flottant, de sorte qu'il renvoie également un flottant.

print 1.0/2
# 0.5
print 1/2.0
# 0.5
print 1.0/2.0
# 0.5

Vous pourriez aussi, comme nneonneo a mentionné on met la somme directement dans la division, comme ça :

(x1+x2)/2.0

Cela donnera également le résultat souhaité.

-2voto

StudentOfScience Points 779
avg = 0.5*(x1+x2)

Cela a fonctionné parce que 1/2, apparemment en python, n'est pas égal à 0,5, mais non, il voit 1/2 comme un sur deux et aucune valeur au-delà d'une décimale sur l'un ou l'autre, donc il suppose que vous ne vous souciez pas de vouloir cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X