Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Peter Otten <__peter__@web.de> Newsgroups: de.comp.lang.python Subject: Re: [Python-de] Python2 auf 3: Matheberechnungen Date: Tue, 18 Aug 2020 10:56:25 +0200 Organization: None Lines: 62 Message-ID: References: <2248102.5IIjVbcv3P@palindrom> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Trace: news.uni-berlin.de /E+RXRdeYHqT62wViKZ4YQ05znDDy1Az9kOAuNMO38OA== Return-Path: <__peter__@web.de> X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org Authentication-Results: mail.python.org; dkim=pass reason="1024-bit key; unprotected key" header.d=web.de header.i=@web.de header.b=lknh2L9R; dkim-adsp=pass; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1597740995; bh=hFtnbTqS9Y+1bXPld+JQkhbHR467AnqUNXPGObaqMAQ=; h=X-UI-Sender-Class:From:To:Subject:Date:In-Reply-To:References; b=lknh2L9RqduB6+c2EvypsY/MC4isbBXjZeTkZVN/wMKW7qep+0pdd1L3T6fjrOGaV tWoPKtWvvP1KGa9sXQT93mtlSNF5J5HW+JMkXj7PSPXFm/eV+9zwGNXE4515zeI03s Ry4NOf91KNxslzRaPzV29EB+dG0Dy5gE1yW3Y3t0= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 User-Agent: KMail/4.13.3 (Linux/3.13.0-170-generic; KDE/4.13.3; x86_64; ; ) In-Reply-To: X-Provags-ID: V03:K1:vag1eimGpcFT2BU74Jzz3PPL/3zGv1w971SvWcjuCa+S8eonsNf Fst/dfUawGt7Dv2c25zWGRqm6c59IMrO/UM7i4hZ3CKj+X0CHwNoPtFO1ByS7ck6uXDD8RK 32IIhkz6bTSAo/z7I0QmShOF8TUDLN67LV84EX8Twoo6oKSqWKqIP27eekQy34+/QRfzgeo 2mEDmdeDXGYy5BQbelkmQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:KeYbtmFpqeE=:vCST2gMlSsCMIGIXfoPtSQ MIN+L5j1zsHeHLI5yd/uHx0ec+SmSaEpEo43nxDA1PNYVBC0cGC7F4F0CqPptid6wzhFXbqk7 qVd1A+HOnDYKwl7J2f9HTzFAveq5sB6axuK3Cs/H94eBzfgjyr9U1wGVGbiNzfy6TcVV3PglE vUYPLTicDVCrZsLC+AEsXsLlFrZvD3ZzgR/wwd9fx134SI1cUG32/qEnFVHq+2LibmAiKEXEz F3/Y8bItEC0jHkYeKdNZBrDr7dEdPofjkKcdk/2hp1qRq657Ju1kX0SwpvoaDZ4qihbZQGHXO tlG97pMJft9EYk0GN5r0o5IpSwQqL6wIx3VeEfUMhz3ksKtgDawfOJ/txZUistWbv6EsNZRQg SNuShv+vHTXvCRgl46kwLdy2gDJhBPHLwQEkWJBYR44NAInx3cFUVkVGhEpFON8gRllOliwZQ liX3zRj5lqTgsqdkonIZWMbcvmPACaWB393TBb34ZSKFik/ow0Gb9eoKYNg8sJTJ31vs6vcNZ Oq74Y5FN0TZAa7an8SZc7lFas1PvqSnKJZT/yylXl/0dY6DdP5IwnXScUtN72r28QEHDjCuMa rnMl6VXQfEBH3IH1SUlqi6FFJ42ygxeWjTxi+fB8xojX4MNyhR6BxH+ZNcdkmyKKYGebXfpXa 5pDdQscGHfHCjeLyCaOVx3tCTrhVoDi7TWD2T8UoBVtNs/zFxsGfuAECvHcTv72Ik5IMV1FhX YePMcmpVqi5vLyjUZKAaiHouvPXdsfr9NvFm1HGuNoIcNxa/YlYzAigjmH0VTE0x4Z0bPuzr5 2IecnbKXSIo0CvPJ9tJOnmt9unHlDQ36X1wXglPnMC6+uSGa04WRom5reswHPQsgERTqDlvHg Q0DOL5yVzkB+nfitMfFIpTm7ZO1lGRCfTAqFk7jQdKZO+27vJ81DE1+CTNeSNpcISJ9h8d7jv ORV42BE+j7eJganH7YwYy/cYi4B3QS55MKF9GYfyeOYNzuJQwEutg1jM/MUNyzUAfuIfn9f/n kLA/fptfY3oeI6zGi+w6P8UNwy0ORv1BEVUx9fEO2/F+eMh6lGjfqqSrtONfFEMquo5oihcjo GFdtctGX76X0/TaL8gLSP8SFjY0LMYZ8kI6tjFPX4BvqXuGwXYIb0RCDtk2Q28VrxwJbyyLgb bBPcnz/eY46vP5+MtmX2OtyQTIru6Bl+OPUcatzIYbIhnCBzi/nAwifcyY/YmJWnqRoZhSPI/ WShk7fE9ctIq6s0N7 X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <2248102.5IIjVbcv3P@palindrom> X-Mailman-Original-References: Xref: csiph.com de.comp.lang.python:5660 Am Di August 18 2020, 08:09:29 schrieb Stephan Seitz: > Hallo! >=20 > Ich versuche gerade, das v=F6llig unn=F6tige ;-) Python-Script AstroB= uild > (https://github.com/lhartikk/AstroBuild) auf Python3 zu migrieren. >=20 > Dabei stelle ich aber fest, da=DF die verwendeten mathematischen > Funktionen teilweise zu anderen Ergebnissen kommen. >=20 > Eine Funktion berechnet z.B. aus Jahr, Monat, Tag und Stunde den folg= enden > Wert: > return 367*year - 7 * ( year + (month+9)/12 ) / 4 + 275*month/9 + day= - > 730530 + float(hour)/float(24) >=20 > Python2 kommt aktuell auf 7536.33333333, Python3 auf 7535.29861111120= 1. > Da dieser Wert f=FCr weitere Berechnungen verwendet wird, komme ich n= ie > auf identische Ergebnisse. >=20 > Woran liegt das?=20 In Python 2 kommt es auf den Typ der Operanden an -- bei der Division z= weier=20 int ist das Ergebnis wieder ein int, in allen anderen F=E4llen ein floa= t: # 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 a= uch=20 Divisor ganzzahlig sind, und dort den Operator / durch // ersetzen: # py3 und py2, i. e. die =C4nderung ist r=FCckw=E4rtskompatibel >>> 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