J'ai traduit le code IDL en Python et j'ai remarqué des différences dans les produits finaux. Les différences ne sont pas non plus négligeables (par exemple, via IDL, j'obtiens 19,03 tandis que Python donne 19,16). J'ai confirmé que les deux scripts produisaient les mêmes valeurs (ils diffèrent généralement dans la quatrième, cinquième ou sixième décimale) jusqu'au point où je commence à faire plusieurs opérations de tableau. Je soupçonne que la précision peut être la cause (les deux tableaux Python et IDL sont type=FLOAT
). J'ai fait une expérience simple et je vois des différences significatives ici aussi.IDL vs Python Float
IDL
a = 0.01
b = 0.0
for r = 1,1000 do begin
b += a
endfor
c = a * 1000
print,b
>>> 10.0001
print,c
>>> 10.0000
Python
a = 0.01
b = 0.00
for r in range(1000):
b += a
c = a * 1000
print(b)
>>> 9.999999999999831
print(c)
>>> 10.0
Certes, la différence est encore faible dans cet exemple, mais Python est clairement beaucoup plus proche de la vérité que ce qui est IDL. Je m'attendais à ce que les résultats soient identiques puisque les deux langues utilisent la précision FLOAT. L'essentiel est que les erreurs se propagent dans les deux langues de différentes manières, ce qui donne des résultats différents. Mes questions sont les suivantes:
est-il une différence de précision entre les deux langues (à savoir ne je pense qu'il ne FLOAT signifie la même chose en IDL comme il le fait en Python,)?
est-il un moyen de concilier les différences de précision?
Je n'ai pas beaucoup d'expérience avec IDL; Ai-je manqué quelque chose d'évident?
PS:
Comme j'écrivais poste this sauté vers le haut. Je vois le même problème que ce OP (Python est correct).
IDL
>>> 3015/0.0002529821940697729
>>> 11917835.
python
>>> 3015/0.0002529821940697729
>>> 11917834.814763514
'FLOAT' n'est pas une précision ... Aussi, vous n'utilisez pas' numpy' ici du tout ... –
Assez juste juanpa. Je suppose que j'ai Numpy dans l'esprit ces jours-ci. Question maintenant corrigée. – tnknepp