Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5660

Re: [Python-de] Python2 auf 3: Matheberechnungen

From Peter Otten <__peter__@web.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] Python2 auf 3: Matheberechnungen
Date 2020-08-18 10:56 +0200
Organization None
Message-ID <mailman.604.1597740997.9580.python-de@python.org> (permalink)
References <hq1glnF175jU1@mid.individual.net> <2248102.5IIjVbcv3P@palindrom>

Show all headers | View raw


Am Di August 18 2020, 08:09:29 schrieb Stephan Seitz:
> Hallo!
> 
> Ich versuche gerade, das völlig unnötige ;-) Python-Script AstroBuild
> (https://github.com/lhartikk/AstroBuild) auf Python3 zu migrieren.
> 
> Dabei stelle ich aber fest, daß die verwendeten mathematischen
> Funktionen teilweise zu anderen Ergebnissen kommen.
> 
> Eine Funktion berechnet z.B. aus Jahr, Monat, Tag und Stunde den folgenden
> Wert:
> return 367*year - 7 * ( year + (month+9)/12 ) / 4 + 275*month/9 + day -
> 730530 + float(hour)/float(24)
> 
> Python2 kommt aktuell auf 7536.33333333, Python3 auf 7535.298611111201.
> Da dieser Wert für weitere Berechnungen verwendet wird, komme ich nie
> auf identische Ergebnisse.
> 
> Woran liegt das? 

In Python 2 kommt es auf den Typ der Operanden an -- bei der Division zweier 
int ist das Ergebnis wieder ein int, in allen anderen Fällen ein float:

# py2
>>> 7/2
3
>>> 7./2
3.5

In Python 3 ist das Ergebniss immer ein float:

# py3
>>> 7/2
3.5


> Und wie portiert man dann so ein Script?

Du musst die Divisionen identifizieren, bei denen sowohl Dividend als auch 
Divisor ganzzahlig sind, und dort den Operator / durch // ersetzen:

# py3 und py2, i. e. die Änderung ist rückwärtskompatibel
>>> 7//2
3

PS: Du kannst das Verhalten von py3 in py2 erzwingen mit

# py2
>>> 7/2
3
>>> from __future__ import division
>>> 7/2
3.5

Back to de.comp.lang.python | Previous | NextPrevious in thread | Find similar


Thread

Python2 auf 3: Matheberechnungen Stephan Seitz <stse+usenet@rootsland.net> - 2020-08-18 08:09 +0000
  Re: [Python-de] Python2 auf 3: Matheberechnungen Hartmut Goebel <h.goebel@goebel-consult.de> - 2020-08-18 10:38 +0200
    Re: [Python-de] Python2 auf 3: Matheberechnungen Stephan Seitz <stse+usenet@rootsland.net> - 2020-08-18 11:00 +0000
  Re: [Python-de] Python2 auf 3: Matheberechnungen Peter Otten <__peter__@web.de> - 2020-08-18 10:56 +0200

csiph-web