numpy.isclose (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.isclose.html):
abs(a - b) <= (atol + rtol * abs(b))
math.isclose (https://docs.python.org/3/library/math.html#math.isclose):
abs(a - b) <= max(rtol * max(abs(a), abs(b)), atol)
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Numpy рдХрд╛ рд╕рдореАрдХрд░рдг рд╕рдордорд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ atol
рдФрд░ rtol
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдЦрд░рд╛рдм рдЪреАрдЬреЗрдВ рд╣реИрдВ (IMO)ред
рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдБ Numpy "рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ" рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдлрд╝реНрд▓реИрдЧ рдХрд░рддреЗ рд╣реИрдВ:
a = 0.142253
b = 0.142219
rtol = 1e-4
atol = 2e-5
# true because atol interferes with the rtol measurement
abs(a - b) <= (atol + rtol * abs(b))
Out[24]: True
# correct result, rtol fails
abs(a - b) <= max(rtol * max(abs(a), abs(b)), atol)
Out[29]: False
рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ, рдпрд╣ рд╕рдорд░реВрдкрддрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ:
a = 0.142253
b = 0.142219
rtol = 1e-4
atol = 1.9776e-05
# relative to b
abs(a - b) <= (atol + rtol * abs(b))
Out[73]: False
#relative to a
abs(a - b) <= (atol + rtol * abs(a))
Out[74]: True
# math one has no problems with this
abs(a - b) <= max(rtol * max(abs(a), abs(b)), atol)
Out[75]: False
рдкрд╛рдпрдерди рдЧрдгрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдмреБрд▓реЗрдЯрдкреНрд░реВрдл рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдХреНрдпрд╛ рдирдореНрдкреА рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? Numpy рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреЛрдИ рд▓рд╛рдн рд╣реИрдВ?
рдХреБрдЫ рднреА imho рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИред
рдпрд╣ рд╕рднреА рдореЗрдВ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рдХрд┐ рд╕рднреА рдЦрд╕рдЦрд╕ тАЛтАЛ( assert_allclose
рдорд╛рдзреНрдпрдо рд╕реЗ) рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдФрд░ рдирд╛рдо рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдЧ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдиреЛрдЯ max(abs(a), abs(b))
рдХреЗ рдмрдЬрд╛рдп abs(b)
рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛ рддреЛрдбрд╝рдиреЗ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рд╛рд▓рдд рдХреЛ рдЖрд░рд╛рдо abs(a) > abs(b)
ред
рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓рд┐рди рдХреЛ рдмреЗрдореЗрд▓ рдХрд░рддрд╛ рд╣реИ
рдЗрд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП?
from numpy.__future__ import isclose
рд╕рдВрдпреЛрдЧ рд╕реЗ, рдХрд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ...
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдпрд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ isclose рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдирдП рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдХреВрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА, рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдпрд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдпрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдирдП рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрдпрд╛рдд рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдПрдХ рд▓рдВрдмрд╛ рдирд╛рдо рдЪреБрдиреЗрдВ, рдЬреИрд╕реЗ mathlike_ufunc
s, рдЬреЛ remainder
рдХреЛ рднреА рдХрд╡рд░ рдХрд░ рд╕рдХреЗред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ from __future__ import print_function
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ print_function
рд╡реИрд╢реНрд╡рд┐рдХ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдпрд╛рдд рдореЗрдВ from __future__ import *
рд╢реИрд▓реА рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдЕрдЬрдЧрд░ рдореЗрдВ, рдпрд╣ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рд╕реНрддрд░ рдкрд░ _syntax_ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛
рдЗрдЯрд┐рд▓реЗрдЯрд░ рдЕрдкрд╡рд╛рдж рдХреЛрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдереЗред рд╣рдореЗрдВ рдмрд╕ рдХреЙрд▓рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рд╕реА рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреИрд╢ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЖрдпрд╛рдд рд╕рдордп рдзреАрдорд╛ рд╣реЛ, рдФрд░ рдХреЗрд╡рд▓ рддреБрдЪреНрдЫ рд╣реЛред
рдЖрдк рд╕рд╣реА рд╣реИрдВ - рдФрд░ true_division
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ isclose рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ # 9444 рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ with
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрджрд╛рд╡рдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрдиред
рдЪрд▓реЛ math.isclose
рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ CC @ ChrisBarker-NOAAред
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╛рдореВрд▓реА рд╕рдорд╕реНрдпрд╛ рд╣реИ IMOред рдЖрдо рддреМрд░ рдкрд░ atol
рдФрд░ rtol
рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛрдиреЗ рддрдХ рдЙрдирдХреЗ рд╕рд╛рде рдлрд╝рд┐рдбрд▓рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓рдХреНрд╖реНрдп рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╕реЗ рдмрдбрд╝реЗ рдкрд░рд┐рдорд╛рдг рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред рд╢рд╛рдпрдж рдпрд╣ rtol
рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреИрд╕реЗ @charris рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ isclose
рдХреЛ рдЕрдХреНрд╕рд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ assert_allclose
рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рддреГрддреАрдп-рдкрдХреНрд╖ рдкрд░реАрдХреНрд╖рдг рд╕рд╣рд╛рдпрдХреЛрдВ рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ __future__
рд╢реИрд▓реА рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ StackOverflow рдкрд░ рдкреВрдЫрд╛: https://stackoverflow.com/questions/29905278/use-future-style-imports-for-module-specific-features-in-python
TLDR: рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рди рдпрд╛ рд╕рд╛рдл рдирд╣реАрдВ рд╣реИред
рд╕реНрдЯреИрдХ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдиреАрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреНрдпрд╛ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЙрддреНрддрд░ рд╣рд╛рдВ рд╣реИ, рддреЛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдкрджрд╛рд╡рдирддрд┐ рдЕрд╡рдзрд┐ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╡рд░реНрд╖ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╛рдЗрдерди рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЕрдЧрд░ рдорд╛рдВрдЧ рд╣реИред
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рд╕рд┐рд░реНрдл isclose(...,symmetric=True)
рдпрд╛ assert_allclose(symmetric=True)
рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ False
, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реЛрдЧреАред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рдЖрдк rtol
рдФрд░ atol
рдорд╛рдиреЛрдВ рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдмрд╕ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЯреНрдпреВрди рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ @njsmith рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдЖрдк рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рддреНрд░реБрдЯрд┐ рднреАрддрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1% ( rtol=0.01
)ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ rtol
рдорд╛рдк рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ 100% ( rtol * abs(b)
atol
рдХрд░реАрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ atol + rtol * abs(b) ~= 2 * rtol * abs(b)
) рд╣реЛрддреА рд╣реИред
рдорддрд▓рдм рдХрд┐ рдХреБрдЫ рдорд╛рди ~ 2% рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд░ рд╕рдХрддреЗ рд╣реИрдВ:
atol = 1e-8 #default
rtol = 0.01 # 1%
b = 1e-6
a = 1.0199e-6 # ~ 2% larger comapared to b
abs(a - b) <= (atol + rtol * abs(b))
True
@Charris рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдмрджрддрд░ рдмрдирд╛ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреБрд▓рдирд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд░рд╛рдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд░реВрдкрддрд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реИред
IMO рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ Numpy рдиреЗ Math рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдмрд╣реБрдд рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред isclose
рдХреЛрд░ рдХреЗ рдмреАрдЪ рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
@njsmith : рдореБрдЭреЗ рдЕрдВрджрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдереЛрдбрд╝рд╛ рд╕рд╛ рдЗрддрд┐рд╣рд╛рд╕: рдЬрдм рдореИрдВрдиреЗ stdlib рдХреЗ рд▓рд┐рдП isclose рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛, рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди рджрд┐рдЦреЗред рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ рдерд╛, рддреЛ рдореИрдВ рдПрдХ рд╕реБрд╕рдВрдЧрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдХреЗ рд▓рд┐рдП, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рддрд╛ :-)ред
рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рдореБрджрд╛рдп рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП "рд╕рд╣реА" рдХреНрдпрд╛ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рд╣реБрдИ ... рдореИрдВрдиреЗ рдкреАрдИрдкреА рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЕрдЧрд░ рдЖрдк рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ numpy рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://www.python.org/dev/peps/pep-0485/#numpy -isclose
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╡рд╣реА рдмрд┐рдВрджреБ рдмрдирд╛рдП рдЧрдП рдереЗред
рдЕрдВрдд рдореЗрдВ, рддреАрди рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рд╕рд╛рдордиреЗ рдЖрдП:
1) рдПрдХ рд╕рдордорд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред
2) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреВрд░реНрдг рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╢рд╛рдпрдж рд╢реВрдиреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЗ рдкрд░рд┐рдорд╛рдг рдХреЗ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдзрд╛рд░рдгрд╛ рди рдмрдирд╛рдИ рдЬрд╛рдПред
3) "рдХрдордЬрд╝реЛрд░" рдФрд░ "рдордЬрдмреВрдд" рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЫреЛрдЯреЗ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо math.isclose рдХреЗ рд▓рд┐рдП "рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда" рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдПред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ "рдмреЗрд╣рддрд░" рд╣реИ рдЬреЛ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрд╣реБрдд рд╕рд╛рд░реЗ (рдФрд░ рдЕрдЬрдЧрд░) рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рдереАрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдкрдпреЛрдЧреА рдереЗ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореМрдЬреВрджрд╛ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд┐рдирд╛ рдпреЗ рдЪреАрдЬреЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдк-рдЗрд╖реНрдЯрддрдо рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИрдВред рдпрд╣ рдПрдХ рдпреБрд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд (рдФрд░ рдЖрд╡рд╢реНрдпрдХ) рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЕрднреА рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реИред
@njsmith рд╕рд╣реА рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ np.isclose () рдХреЗ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдХрдареЛрд░ FP рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╣реИрдВ, рдмрд▓реНрдХрд┐, np.isclose () рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ atol
- рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рддрд░реНрдХ рдХреНрд░рдо 1 рдХреЗ рд╣реИрдВ - рдЬреЛ рдмрд╣реБрдд рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ рдЬреЛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред , рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
In [85]: np.isclose(9.0e-9, 1.0e-9)
Out[85]: True
рдЖрдЙрдЪ!
рдФрд░ рд╣рд╛рдБ, рдпрд╣ atol
рдХрд╛рд░рдг рд╣реИ:
In [86]: np.isclose(9.0e-9, 1.0e-9, atol=0.0)
Out[86]: False
рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдореБрдЭреЗ рдХреАрд╡рд░реНрдб рддрд░реНрдХ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ - __future__ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред
рдФрд░ рдлрд┐рд░ рд╣рдо рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдбрд┐рдкреНрд░реЗрд╢рди рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдЬрд╛рд░реА рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрддрдГ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдиреАрдЪреЗ рдХреА рдУрд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...
рдореИрдВ @bashtage рдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
"" "
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ (..., рд╕рдордорд┐рдд = рд╕рддреНрдп) рдпрд╛ assert_allclose (рд╕рдордорд┐рдд = рд╕рддреНрдп) рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧрд▓рдд рд╣реЛрдЧрд╛, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ред
"" "
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирдП рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рд╕реЗ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЕрдкрд╡реНрдпрдп рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдпрд╛ рдирд╣реАрдВ) рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рд╢рд╕реНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ (рдордЬрдмреВрдд) рд╕рдордорд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, atol
рдХреЛ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рд╢рд╛рдпрдж рд╣рдореЗрдВ symmetric
рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ ...
рдУрд╣ - рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ isclose()
рдХреЛ assert allclose()
рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╣реАрдВ рдФрд░ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕рдВрднрд╡рдд: рд╡рдВрдЪрд┐рддрддрд╛ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рд╣реИ
рдлрд┐рд░ рд╡рд┐рд▓рдп рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рд╣рдо рдмрд╕ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдореЗрдВ рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреА рд╣реИ
рд╕рдордорд┐рдд рдЭреВрдареА =; рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╣реЛрдиреЗ рдкрд░ рднреА рдХрднреА рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕реЗ assert_allclose
рднреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рд╣рдо рдХреЗрд╡рд▓ рдЪреБрдкрдЪрд╛рдк рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ? рд▓реЛрдЧреЛрдВ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЪреБрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╣рд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣рдирд╢реАрд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ
@xoviat @ eric-wieser assert_allclose
рди рддреЛ рдХреЛрдИ рдкреАрдЫреЗ рдХреА рдУрд░ рдЕрд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рди рд╣реА рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдкрдХреНрд╖рдп рдЪреЗрддрд╛рд╡рдиреА, рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬрдм рддрдХ рдореИрдВ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдЖрдк рдПрдХ рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╢рд┐рд╢реБ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд░реНрдж рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ
рдореБрдЭреЗ рд▓рд╛рднред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдЯреЛрд▓ рдиреЙрдирдЬрд╝рд░реЛ рд╣реЛрдирд╛ рдХреЛрдИ рджреБрд░реНрдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдордЭрджрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬрд╣рд╛рдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рд╕рдЯреАрдХ рд╢реВрдиреНрдпред
рдХрд┐рд╕реА рднреА assert_allclose рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
IMO рдЪреБрдк рдкрд░рд┐рд╡рд░реНрддрди рдмреБрд░рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ! рдЕрд╡рд┐рдХрд╕рд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐
рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдВрддрдд: рдзреНрд╡рдЬ рдХреЛ рдПрдХ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рд╕рдВрдХреЗрдд рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдФрд░ рдХреБрдЫ рдирд╣реАрдВ
IMO рдЪреБрдк рдкрд░рд┐рд╡рд░реНрддрди рдмреБрд░рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!
рдорд╛рдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╢реВрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрд╡рд╕рд╛рджрди рдЪреЗрддрд╛рд╡рдиреА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рдХрдо рд╕реЗ рдХрдо рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рдЦрд░рдЦрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреА рд╣реИред
@Charris рдЬреИрд╕реЗ рдЧреИрд░-рд╕рдорд░реВрдкрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрд╣ рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрди рд╕реНрдерд╛рди рдХреЛ рднреА рдореБрдХреНрдд рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ atol != 0.0
рд╣реЛрдиреЗ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдмреБрд░реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рднрд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдмрджрд▓реЗ рд╣реБрдП рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
рд╡реНрдпрд╡рд╣рд╛рд░ред рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд╣реИред
рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЭрдВрдбреЗ рдЗрдВрдЬреЗрдХреНрд╖рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд refactoring рдЙрдкрдХрд░рдг рд╣реИ
рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдореЗрдВред рддрдм 'рдореЗрдВрдЯреЗрдиреЗрдВрд╕' рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛
рдХреЛрдб; 5 рдорд┐рдирдЯ рдХрд╛ рдХрд╛рдоред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рдПрдХ рдирдП рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рдеред
@Charris рдЬреИрд╕реЗ рдЧреИрд░-рд╕рдорд░реВрдкрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рд╡рд╣ рд╕реБрдЭрд╛рд╡ (https://github.com/numpy/numpy/issues/10161#issuecomment-349384830) рд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИред
рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдмрджрд▓реЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдП рдмрд┐рдирд╛ рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд╣рдо рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд▓рд╛рдЧрдд / рд▓рд╛рдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рд╣реИ рдЬреЛ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдпрд╛ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдЧ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрдХреАрдирди рдПрдХ рдЙрдк-рдкреНрд░рдХрд╛рд░реАрдп рд╡рд┐рдХрд▓реНрдк)ред
рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ isclose рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди assert_allclose рдХрд╛ рдирд╣реАрдВред
рд╕реНрд░реЛрддреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ, рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд┐рд╣рд╛рдИ рд╣реЛрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рд╛рдн рдЕрднреА рднреА рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред рдореИрдВ рдХрд┐рд╕реА рдХреЛ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛
рдПрдХ рдЭрдВрдбрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╣реА?
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдЭрдВрдбрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╣реА рд╣реИ?
рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред @charris рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдзреНрд╡рдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рдзреНрд╡рдЬ рдЬреЛ рдЗрд╕реЗ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ:
In [1]: import math
In [2]: math.isclose(0, 1e-200)
Out[2]: False
рдореИрдВ рдареЛрд╕ рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рдмрд┐рдирд╛ рдЭрдВрдбреЗ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЙрдкрдпреЛрдЧреА рд▓рд┐рдЯрдорд╕ рдЯреЗрд╕реНрдЯ: рдпрджрд┐ рдХрд┐рд╕реА рдиреМрд╕рд┐рдЦрд┐рдП рджреЗрд╡ рдиреЗ рдЖрдкрд╕реЗ рдкреВрдЫрд╛ рдХрд┐ рдпрд╣ рдзреНрд╡рдЬ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЖрдк рдХреИрд╕реЗ рд╕рдордЭрд╛рдПрдВрдЧреЗ?
рдЖрдк рдХреИрд╕реЗ рд╕рдордЭрд╛рдПрдВрдЧреЗ?
math.isclose
рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк symmetric=True
рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВрдореИрдВ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рд░рд╣реА рд╣реИред
рд╕рдВрднрд╡рдд: рдпрд╣рд╛рдВ рд╣рд▓ рдХреА рдЬрд╛ рд░рд╣реА рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╢реБрд░реБрдЖрддреА рд╣реИ
рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЛрдЪреЗрдВред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, @rgommers рджреНрд╡рд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреЛрдЯреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рд╕рдВрдЦреНрдпрд╛? IMO math.isclose рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рднреА рдирд╣реАрдВ
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ
рдПрдХ-рдЖрдХрд╛рд░-рдлрд┐рдЯ-рд╕рднреА рд╕рдорд╛рдзрд╛рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдЦреНрдпрд╛рдПрдВ "рдХрд░реАрдм" рд╣реИрдВред рдкрд░рдВрддреБ
рджреВрд╕рд░реЛрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ (рдЬреЛ рдЧрд▓рдд рдирд╣реАрдВ рд╣реИрдВ!), рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рд╣реИ
рд╢рд╛рдпрдж рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдЕрджреНрдпрддрди (рдкреНрд░рд╕рд┐рджреНрдз рдЕрдВрддрд┐рдо рд╢рдмреНрдж, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ
рдкрд╣рд▓реЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдПрдХ рдЭрдВрдбрд╛ рдареАрдХ рд╣реЛрдЧрд╛)?
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ math.isclose
рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдиреЛрдЯ рдФрд░ рдпрд╣ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреИрд╕реЗ rtol рдФрд░ atol рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрджрд┐ рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ @charris рдиреЗ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ
isclose рдХрдо рд╕рд╣рд┐рд╖реНрдгреБ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИ, рдЬреЛ рдирд╣реАрдВ рдЯреВрдЯреЗрдЧрд╛
рдХреЛрдИ рднреА рдкрд░реАрдХреНрд╖рдгред рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА () рдХрд╛ рдЕрдиреБрдХрд░рдг рд╣реЛрдЧрд╛
рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдПрдХ рдмрд╛рд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рдпрджрд┐ рдХреЛрдИ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдВ рдХреНрд▓реЛрдХреЛрд╕ рд╣реЛрдЧрд╛
рдЬрдм рд╡реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдереЗ рддрдм рд╕рдВрдЦреНрдпрд╛ рдХреЛ "рдХрд░реАрдм" рдорд╛рдиреЗрдВред рд╡рд╣ рдмрд╣реБрдд рд╣реИрдмреЗрд╣рддрд░ рд╣реИ
рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ math.isclose
рдЕрд▓рдЧ рдмрдирд╛рддреА рд╣реИрдВ:
atol
рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯrtol
рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ `math.isclose рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рддрдп рд╣реЛ рдЧрдИ рд╣реИ symmetric
рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреВрдХ False
ред рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ _ " np.isclose(x, y, symmetric=True, atol=0)
math.isclose(x, y)
" рдХрд╛ рдПрдХ рд╕рджрд┐рд╢ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдЪреАрдЬрд╝ рдХреЛ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
isclose
рдХреЙрд▓ рдХрд░реЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд┐рдирд╛ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП isclose(..., symmetric=False)
рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВ (рдФрд░ allclose
)ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рдирд╣реАрдВ рдорд╛рд░ рдкрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред assert_close
рдХреЛ isclose(..., symmetric=False)
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗsymmetric
рддрд░реНрдХ рдХреЗ рд▓рд┐рдП assert_close
ред рдпрд╣ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдиреАрдЪреЗ рдХреА рдУрд░ рдордВрдерди рд╣реЛрдЧрд╛рдЗрдирдореЗрдВ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 1 рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдЪреАрдЬреЗрдВ рдРрд╕реА рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╡реНрдпрд╡рдзрд╛рди рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: 2 рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЗрд╡рд▓ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддреА рд╣реИ рдЕрдЧрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛, рдЬреЛ рдмрд╣реБрдд рдХрдо рд╢реЛрд░ рд╣реЛрдЧрд╛ред
@ eric-wieser рдПрдХ рддреАрд╕рд░рд╛ рдЕрдВрддрд░ рд╣реИ: atol
рдФрд░ rtol
рд╕рдВрдпреБрдХреНрдд рд╣реИрдВред ( math.isclose
max
, numpy.isclose
+
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕ рдХрд╛ рдорддрд▓рдм рд╣реИ, рдЬрдм рддрдХ рдХрд┐ atol
рдпрд╛ rtol
рд╢реВрдиреНрдп рд╣реИ, рд╡рд╣рд╛рдБ рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ math.isclose
рдХреЙрд▓ рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ numpy.isclose
рдХреЙрд▓ред
рдореБрдЭреЗ рдЕрднреА рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджреГрд╢реНрдпрдорд╛рди рдПрдкреАрдЖрдИ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдореИрдВ рд╡рд┐рдХрд▓реНрдк рджреЛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдерд╛ред рдореИрдВ рдЕрднреА рднреА рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдкрдХреНрд╖
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдЯрд╛рдЗрдкреБрд▓реЗрд╢рди рдЬреЛ рдХрд┐ рдЦрд╕реНрддрд╛ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛
рдЙрдкрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ (рдЬреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐_рдкреНрд╡рд╛рдЗрдВрдЯреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛) рдЬрд┐рд╕реЗ рдЖрдк рдмрд╕ рдЕрдкрдиреЗ рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рджреВрд╕рд░реЛрдВ рдиреЗ рдЬреЛ рдХрд╣рд╛, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рджреВрд╕рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдХрднреА рднреА рддреАрди рдпрд╛ рдЪрд╛рд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реВрдВред рдореЗрдВ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рддрдХ рдлрд╝рдВрдХреНрд╢рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВ
рдХрдо рд╕реЗ рдХрдо рдЪрд╛рд░ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рд╡рд┐рдХрд▓реНрдк рджреЛ (рдЬреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИрдВ) рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ, рдореИрдВ рд╣реЛрдЧрд╛
рд╡рд┐рдХрд▓реНрдк рдПрдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВред рд▓реЗрдХрд┐рди рдЕрдиреНрдп (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @njsmith) рдЗрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА ред рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рдзрд╛рд░рдгрд╛ рддреЛ рдпрд╣реА рд╣реИред
@njsmith рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ; рдЖрдк рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЙрд╕ рддреАрд╕рд░реЗ рдЕрдВрддрд░ рдХреЛ рдПрдХ handwavey _ рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реВрдБ _ "rtol рдЕрд▓рдЧ рд╣реИ" _
"" "
рдореИрдВ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рд░рд╣реА рд╣реИред
"" "
рдореИрдВ рдбреЛрдирдЯреНрд╕ рдХреЛ рджрд╛рдВрд╡ рд▓рдЧрд╛рдКрдВрдЧрд╛ (рдЬреЛ рдореИрдВ рдХрд░реВрдВрдЧрд╛ 'рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ ..) рдХрд┐ рд╡рд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬреЛ рдХрд┐ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрдЯреЛрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдХрдо рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рддреАрди "рд╕рдорд╕реНрдпрд╛рдПрдВ" рд╣реИрдВ:
1) рдпрд╣ рд╕рдордорд┐рдд рдирд╣реАрдВ рд╣реИ
2) рдПрдЯреЛрд▓ рд╢реВрдиреНрдп (рддреБрд▓рдирд╛ рди рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рдХреА рддреБрд▓рдирд╛ рди рдХрд░рдиреЗ рдкрд░ рднреА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рджреЛ рдХреЗ рдХрд╛рд░рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ - рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдпрджрд┐ рдПрдЯреЛрд▓ рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдпрд╣ рдмрдбрд╝реЗ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реЛ рдкрд░рд┐рдорд╛рдг рдореВрд▓реНрдпреЛрдВред
3) рдПрдЯреЛрд▓ рдиреЙрди-рдЬреАрд░реЛ рдбрд┐рдлреЙрд▓реНрдЯ рд╣реИ - рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде) рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ - рдФрд░ рд╕рднреА рдЕрдХреНрд╕рд░ рд╣рдо рднреА рд╣реЛрддреЗ рд╣реИрдВ рдереЛрдбрд╝рд╛ рдЖрд▓рд╕реА - рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ, ans рдпрджрд┐ рдпрд╣ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред (рдЬрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдореИрдВ рд╡рд╛рдкрд╕ y рдХреЛрдб рдкрд░ рдЧрдпрд╛, рдФрд░ DID рдиреЗ рдЙрди рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдвреВрдВрдврд╛ - рд╡реВрдкреНрд╕!
рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рд╣реИ "рдЕрдЧрд░ рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реЛрдЧрд╛ рддреЛ:
isclose (1e-200, 0.0)
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд▓реМрдЯрд╛ред рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ - рд╣рд╛рдВ, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) rsults:
[8] рдореЗрдВ: np.isclose (1e-20, 1e-10)
рдмрд╛рд╣рд░ [8]: рд╕рдЪ рд╣реИ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ? рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдЪ рд╣реИ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ ????
рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдПрдЯреЛрд▓ рдиреЙрди-рдЬреАрд░реЛ рд╣реЛрдиреЗ рд╕реЗ рд╢реВрдиреНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╢рд╛рдпрдж рдХрдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦрддрд░рдирд╛рдХ рдФрд░ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдЬрдм рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдЫреЛрдЯреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдХрдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рдорд╛рдг 1 рдХреЗ рдХреНрд░рдо рд╕реЗ рдХрдо рд╣реЛрддрд╛ рд╣реИ)ред
рдФрд░ рдпрджрд┐ рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ 1e8 рд╕реЗ рдмрдбрд╝рд╛ рдХрд╣реЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдЯреЛрд▓ рднреА рдЕрдиреБрдЪрд┐рдд рд╣реИред
рдФрд░ (2) рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдЯреЛрд▓ рднреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рддреЛ: рдирд╣реАрдВ, рдпрд╣ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ "рдЯреВрдЯрд╛ рд╣реБрдЖ" рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╣реА рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдзреНрд╡рдЬ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдирд╛ рджрд┐рдорд╛рдЧ рдмрджрд▓ рд░рд╣рд╛ рд╣реВрдВ - рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдзреНрд╡рдЬ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо "рдкреБрд░рд╛рдиреЗ" рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ рд╕рднреА рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдПред рдФрд░ рд╡рд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдЪреНрдЫреЗ рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рд╢рд╛рдпрдж рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди, рдПрдХ рдирдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреНрд░рдо рдореЗрдВ рд╣реИред рд╣рдо рдбреЙрдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ _maybe_ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрдм рд▓реЛрдЧ рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХрднреА рднреА рдХрд┐рд╕реА рдХреЗ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝реЗрдВрдЧреЗред
рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рдирдП рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ ????
рд╢рд╛рдпрдж np.math.isclose рдФрд░ рджреЛрд╕реНрдд? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред
рдпрд╣ np.remainder
рднреА рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ from numpy import math
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рддреЛ рдореИрдВ +1
np.math
рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╣реЛрдЧрд╛
рдПрдХ рджрд╢рдХ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдПрдХ рдирдП рд╕рдорд╛рд░реЛрд╣ рдкрд░ -1ред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ -1 рдПрдХ рдкреВрд░реЗ рдирдП рд╕рдмрдореЙрдбреНрдпреВрд▓ рдкрд░ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ? рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдЪ рд╣реИ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ ????
рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╕рд╣реА рд╣реИ рдпрд╛ рдЧрд▓рдд, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрджрд░реНрдн рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрджрд┐ рдпрд╣ рдЙрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ [0, 1) рдкрд░ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рддреЛ рд╣рд╛рдБ, рдЖрдк рд╢рд╛рдпрдж True рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реНрдг / рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣реА рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИред
symmetric_isclose()
рдереЛрдбрд╝реА рд▓рдВрдмреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдЖрдБрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдХреНрд░рд╛рдордХ рдирд╣реАрдВ рд╣реИред
10 рджрд┐рд╕рдВрдмрд░, 2017 рдХреЛ рд░рд╛рдд 8:09 рдмрдЬреЗ, рд░рд╛рд▓реНрдл рдЧреЛрдореНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рдХреЗрд╡рд▓ рдЕрдиреНрдп рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде
рдПрдХ рджрд╢рдХ рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИрдВ
рд╡рд┐рдЪрд╛рд░ред
рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдирд╛ рдмрджрддрд░ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬреЛ рд╕рд░рд▓ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рд╕реБрдиреНрди рдирд╣реАрдВ рд╣реИ?
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ
рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ред
рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ - рдбрд┐рдлреЙрд▓реНрдЯ рдХреА рдмрд╛рдд - рдмрд╣реБрдд рдХреБрдЫред
рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ
рд╕рдордорд┐рдд рддреБрд▓рдирд╛ред
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ -1 рдПрдХ рдкреВрд░реЗ рдирдП рд╕рдмрдореЙрдбреНрдпреВрд▓ рдкрд░ред
рдореИрдВ рднреАред рдпрджрд┐ рдЧрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдмрд┐рдирд╛ рд╕реБрдиреНрди рдХреЗ рд╣реИрдВ
рд╕рдордХрдХреНрд╖ рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ, рдЙрдиреНрд╣реЗрдВ numpy рдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ? рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ
рд╕рдЪ????
рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╕рд╣реА рд╣реИ рдпрд╛ рдЧрд▓рдд, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрджрд░реНрдн рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдПрдЯреЛрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдИ "рдЙрдЪрд┐рдд" рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдХрд┐ [0, 1 рдкрд░ рдПрдХ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рд╕реЗ рдЖрддреЗ рд╣реИрдВ)
рддреЛ рд╣рд╛рдБ, рдЖрдк рд╢рд╛рдпрдж рд╕рдЪ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред
рд▓реЗрдХрд┐рди .close рдХреЛ рдПрдХ рд╕рд╛рдкреЗрдХреНрд╖ рддреБрд▓рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдФрд░ рдпрд╣рд╛рдБ
рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдиреЗрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдзреЛрдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдкреВрд░реНрдг рддреБрд▓рдирд╛,
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдЕрдкреЗрдХреНрд╖рд╛ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдореЗрд░рд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗрд╡рд▓ рдЙрдЪрд┐рдд рд╣реИ
рдкрд░рд┐рдорд╛рдг рдХреЗ рдХреНрд░рдо рдХреЗ рдорд╛рди 1. рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛, рдирд┐рд╢реНрдЪрд┐рдд, рд▓реЗрдХрд┐рди рдирд╣реАрдВ
рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХред
рдпрд╣ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рдмрджрддрд░ рд╣реИ - рдПрдХ рдЧрд▓рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдпрд╛ рдПрдХ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХред
рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИред
(рдпрд╛рдиреА рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рдЬреЛ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)
рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реНрдг / рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреНрдпрд╛
рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рддрд╛ рд╣реИ,
рдмрд┐рд▓реНрдХреБрд▓ - рд▓реЗрдХрд┐рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рднреА рдЙрдЪрд┐рдд рдЪреВрдХ рдФрд░ рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдордЬрдмреВрдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЕрдХреЗрд▓реЗ рдХрд╛рд░реНрдп рдЫреЛрдбрд╝рдиреЗ рдХреА рдУрд░ рдкреНрд░рд╡реГрддреНрдд рд╣реВрдВред рд╕рдорд░реВрдкрддрд╛ рдХреА рдХрдореА рдХреЛ ".close (a, b) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ a, b рдХреЗ рд╕рдореАрдк рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреА рдирд┐рд░рдкреЗрдХреНрд╖ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ b, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрд░реАрдм рд╣реИред рдмреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред " рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╕рдордорд┐рдд рдХрд╛рд░реНрдп рдорд╛рдорд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдФрдЪрд┐рддреНрдп рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд╕рд╛рдкреЗрдХреНрд╖ рддреНрд░реБрдЯрд┐, рд╡рд┐рднрд╛рдЬрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╕рдордорд┐рдд рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдирд╛ рдмрджрддрд░ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬреЛ рд╕рд░рд▓ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рд╕реБрдиреНрди рдирд╣реАрдВ рд╣реИ?
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдореВрд▓реНрдп рдирд┐рд░реНрдгрдп рдпрд╣рд╛рдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдирд╛ рдХрд┐рд╕реА рдирдП рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ imho рдирд╣реАрдВ рд╣реИред рддреАрди рд╡рд┐рдХрд▓реНрдк:
2 рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ 3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕реБрдиреНрди "рдмреЗрд╣рддрд░" рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдмрд╛рдд рдХреЛ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдЯреЛрд▓ / рдЖрд░рдЯреАрдУрд▓ рдЪреАрдЬрд╝ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ - рдПрдХ рдирдпрд╛ рдФрд░ рдереЛрдбрд╝рд╛ "рдмреЗрд╣рддрд░" assert_allclose
? рдЗрд╕рд╕реЗ рдбреЙрдХ рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рдФрд░ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдХрд╛рдлреА рдЧрдВрднреАрд░ рджреЛрд╖ рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЦрд░рд╛рдм рд╣реИ ... рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЪрд╛рдВрдж рдХреЛ рдХреБрдЫ рднреА рднреЗрдЬреЗрдВрдЧреЗ рдЬрд┐рд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг numpy.isclose рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдЯреЛрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдмрд╛рд░ ... рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрди рдиреБрдХрд╕рд╛рдиреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬрдм рддрдХ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛) рдкрд░ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрдм рддрдХ рдПрдХ рдЙрдкрдирд╛рдо рд╕рдорд╛рд░реЛрд╣ рдЬреЛрдбрд╝рдирд╛ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рджреЗрдЧрд╛ред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╕рдорд░реВрдкрддрд╛ рд╕рд╛рдорд╛рди рдорд╛рдореВрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреБрдХрд╕рд╛рди рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
@rgommers рдиреЗ рд▓рд┐рдЦрд╛:
"" "
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдореВрд▓реНрдп рдирд┐рд░реНрдгрдп рдпрд╣рд╛рдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдирд╛ рдХрд┐рд╕реА рдирдП рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ imho рдирд╣реАрдВ рд╣реИред
"" "
рдЦреИрд░, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ, рдФрд░ math.isclose
рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╣рдордиреЗ рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рддреЛ, рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЗрд╣рддрд░ рд╣реИред рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрдо рд╕рд╣рдорддрд┐ рдереАред
рдФрд░ numpy рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо / рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рдБред
рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП, рдмреЗрд╣рддрд░, рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рд╣реЛрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ (рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдЪрд░реНрдЪрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдХрд┐ "рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рдХреЗрд╡рд▓ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде, рдЬреЛ рдПрдХ рджрд╢рдХ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╡рд┐рдЪрд╛рд░ рд╣реИ" рдЪрд░реНрдЪрд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдирдпрд╛ рддрд░реАрдХрд╛ "рдмреЗрд╣рддрд░ рдкрд░реНрдпрд╛рдкреНрдд" рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХрд▓реНрдк "рдмреЗрд╣рддрд░ рдкрд░реНрдпрд╛рдкреНрдд" рд╣реИ, рди рдХрд┐ рдпрд╣ "рдмреЗрд╣рддрд░" рд╣реИред
рдФрд░ рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЦреБрдж рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдпрд╣рд╛рдБ рдХреБрдВрдЬреА рдореЗрд░реА рдУрд░ рд╕реЗ рдХреБрдЫ рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдо рдХрднреА рднреА рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╕рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди:
1) np.isclose () рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣реИ - рдХреНрдпрд╛ рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ рдЬреЛ рдЖрдк рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ? - рдпрд╣ ppest рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ np.assert_all_close, рдпрд╛ рдЕрдзрд┐рдХ рд╕реАрдзреЗ, рдпрд╛ ... рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИред
2) рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдареЛрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдПрд░рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреИрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрддреНрддрд░ рдХрд┐рддрдиреЗ рдЕрдЪреНрдЫреЗ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдмрд▓реНрдХрд┐, рд╡реЗ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдпрд╛ рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╣рд┐рд╖реНрдгреБ (рддреЛрдВ) рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
3) рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, (2) рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддреЗ рд╣реИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
4) рд▓реЛрдЧ рдбреЙрдХреНрд╕ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗ рдкрд░реЗ "рдореИрдВ рдЗрд╕реЗ" рдЪрд░рдг рдХреИрд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ) - рдХрдо рд╕реЗ рдХрдо рддрдм рддрдХ рдирд╣реАрдВ рдЬрдм рддрдХ рд╡реЗ рднреНрд░рд╛рдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдФрд░ рддрдм рд╡реЗ рдЕрдВрджрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рднреНрд░рдо рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред ред рд▓реЗрдХрд┐рди рджреЗрдЦреЗрдВ (3) - рдЕрдЧрд░ рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВред
рдпрд╣ рд╕рдм рдореБрдЭреЗ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде "рдЦреМрдлрдирд╛рдХ" рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдПрдлрд╕реА рдХреА рдирд┐рдХрдЯрддрд╛ рдкрд░реАрдХреНрд╖рдг рдХреА рддрд░рд╣ред
рдФрд░ рдХреНрдпреЛрдВ рдмреЗрд╣рддрд░ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдбреЙрдХреНрд╕, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рд╢рд╛рдпрдж рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реВрдВ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдзреНрдпрд╛рди рд╕реЗ рдбреЙрдХреНрд╕ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдЯреЛрд▓ рдФрд░ рдПрдЯреЛрд▓ рджреЛрдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдФрд░ рди рд╣реА рдореЗрд░реА рдЯреАрдо рдХреЗ рдЖрдзрд╛ рджрд░реНрдЬрди рд▓реЛрдЧреЛрдВ рдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛, рдЬрдм рддрдХ рдореИрдВ рдирд╣реАрдВ рдмрди рдЧрдпрд╛ рдЗрди рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИред
: рдмрд┐рдХреЗрд╢реЗрдб: (рд░рдлрд╝реВ, рдХрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдХреЛрдИ рдирд┐рдлреНрдЯреА рдЗрдореЛрдЬреА)
рд╢рд╛рдпрдж relatively_close
, рдпрд╛ rel_close
?
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд "рдордЬрд╝рд╛" рд╢рд┐рдХрди: assert_allclose рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ atol = 0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдЪреВрдХред рд╡рд╣рд╛рдБ рдПрдХ рдФрд░ рдкреВрд░реЗ рдзрд╛рдЧреЗ рдкрд░ рдмрд╣рд╕ рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд╣ рдЕрд╕рдВрдЧрддрд┐ред (рдореЗрд░реЗ рдлреЛрди рдкрд░ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред)
11 рджрд┐рд╕рдВрдмрд░, 2017 14:58 рдХреЛ, "рдХреНрд░рд┐рд╕ рдмрд╛рд░реНрдХрд░" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
@rgommers https://github.com/rgommers рдиреЗ рд▓рд┐рдЦрд╛:
"" "
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдореВрд▓реНрдп рдирд┐рд░реНрдгрдп рдпрд╣рд╛рдБ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ
рдХреЛрдИ рдирдП рдХрд╛рд░реНрдп рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ imho рдирд╣реАрдВ рд╣реИред
"" "
рдЦреИрд░, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
math.isclose, рдФрд░ рд╣рдордиреЗ рд╕реБрдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛
рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВред рддреЛ, рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЗрд╣рддрд░ рд╣реИред рдФрд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛
рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрдо рд╕рд╣рдорддрд┐ рдереАредрдФрд░ numpy рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо / рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рдБред
рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП, рдмреЗрд╣рддрд░, рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛
рд╕реБрдиреНрди рдирд╣реАрдВ рдмреЗрд╣рддрд░ рд╣реИ, рдмрд╕ рдкреБрд░рд╛рдиреЗ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ (рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реИ
рдкреНрд░рд▓реЗрдЦрд┐рдд) рд╡рд╣рд╛рдБ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдЬрд╝рд░реВрд░, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдерд╛
рдЯреА рдХреА рдХреЛрд╢рд┐рд╢ рд╣реИ рдХрд┐ рдЪрд░реНрдЪрд╛ рд╣реИ, рдФрд░ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдХрд┐ "рдкрд░рд┐рдЪрдп
рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдирдП рдХрд╛рд░реНрдп
рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд╢рдХ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╡рд┐рдЪрд╛рд░ рд╣реИ "
рдЪрд░реНрдЪрд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИ
"рдмреЗрд╣рддрд░ рдкрд░реНрдпрд╛рдкреНрдд" рд╕реЗ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ
рдЗрд╕ рдмрд╛рдд рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХрд▓реНрдк "рдмреЗрд╣рддрд░ рдкрд░реНрдпрд╛рдкреНрдд" рд╣реИ, рдирд╣реАрдВ
рдХреНрдпрд╛ рдпрд╣ "рдмреЗрд╣рддрд░" рд╣реИредрдФрд░ рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЦреБрдж рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд▓рд╛рдпрдХ рд╣реИ
рдкрд░рд┐рд╡рд░реНрддрди, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВредрдпрд╣рд╛рдБ рдХреБрдВрдЬреА рдореЗрд░реА рдУрд░ рд╕реЗ рдХреБрдЫ рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХрднреА рднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╡реЗ рд╕рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди:1ред
np.isclose () рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣реИ - рдЖрдкрдХреЗ рдЙрддреНрддрд░ рд╣реИрдВ
рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ? - рдпрд╣ np.assert_all_close, рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ
рдЕрдзрд┐рдХ рд╕реАрдзреЗ, pytest рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдпрд╛ ...ред
2редрдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, рдХрдареЛрд░ рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрддреНрддрд░ рдХрд┐рддрдиреЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВ
рдЕрдкреЗрдХреНрд╖рд┐рддред рдмрд▓реНрдХрд┐, рд╡реЗ рдПрдХ рдореВрд▓реНрдп рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╡реЗ рджреЗрдЦрддреЗ рд╣реИрдВ
рдкрд░рд┐рдгрд╛рдо рдФрд░ рддрдп рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдпрд╛ рдЕрдЧрд░ рддреЗ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рд╣рд┐рд╖реНрдгреБ (рддреЛрдВ)ред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдЯреЛрд▓ рдФрд░
rtol рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╕рдордорд┐рдд рд╣реИредрдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, (2) рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛, рдФрд░ рдХреЗрд╡рд▓ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИредрдЗрд╕ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдЯреЛрд▓ рд╣реЛрдирд╛ рдХрд╛рдлреА рдЦрддрд░рдирд╛рдХ рд╣реИ - рдкрд░реАрдХреНрд╖рдг
рдЬреЛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдмрд╣реБрдд рдмреБрд░реА рдмрд╛рдд рд╣реИредрд▓реЛрдЧ рдбреЙрдХреНрд╕ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗ рдкрд░реЗ "рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реВрдВ"
рдордВрдЪ) - рдХрдо рд╕реЗ рдХрдо рддрдм рддрдХ рдирд╣реАрдВ рдЬрдм рддрдХ рд╡реЗ рднреНрд░рд╛рдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдвреВрдВрдврддреЗ, рдФрд░ рддрдм рддрдХ рд╡реЗ
рдЕрдВрджрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рджреБрд╡рд┐рдзрд╛ред рд▓реЗрдХрд┐рди рджреЗрдЦреЗрдВ (3) - рдЕрдЧрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╡реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдХреЛ рджреЗрдЦреЗрдВредрдпрд╣ рд╕рдм рдореБрдЭреЗ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реБрдиреНрди рдПрдХ рдХреЗ рд╕рд╛рде "рдмреЗрд╣рддрд░" рд╣реЛрдЧрд╛
рдЕрдзрд┐рдХ math.isclose- рдЬреИрд╕реЗ FP рдХреНрд▓реЛрдЬрдиреЗрд╕ рдЯреЗрд╕реНрдЯредрдФрд░ рдХреНрдпреЛрдВ рдмреЗрд╣рддрд░ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдбреЙрдХреНрд╕, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рд╢рд╛рдпрдж рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реВрдВ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдзреНрдпрд╛рди рд╕реЗ рдбреЙрдХреНрд╕ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░
рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП rtol рдФрд░ atol рджреЛрдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ -
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ, рдФрд░ рди рд╣реА рдореЗрд░реА рдЯреАрдо рдХреЗ рдЖрдзрд╛ рджрд░реНрдЬрди рд▓реЛрдЧреЛрдВ рдиреЗ, рдЬрдм рддрдХ рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛
рдЗрди рдореБрджреНрджреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реБрдПред: рдмрд┐рдХреЗрд╢реЗрдб: (рд░рдлрд╝реВ, рдХрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдХреЛрдИ рдирд┐рдлреНрдЯреА рдЗрдореЛрдЬреА)
рд╢рд╛рдпрдж рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд_рдХреНрд▓рд╛рд╕, рдпрд╛ rel_close?
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/10161#issuecomment-350886540 , рдпрд╛ рдореНрдпреВрдЯ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AAlOaNquy47fsOkvBlxcSa-Mxyhgdimlks5s_bORgaJpZM4Q2J-P
ред
рдЖрдкрдХрд╛ рдорддрд▓рдм # 3183 рд╣реИ?
assert_allclose рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ atol = 0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдЬреЛ рдореБрдЭреЗ рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░рд╛рддрд╛ рд╣реИред
рдпрд╣ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдорддрднреЗрджреЛрдВ рдХреЗ рдЕрддреАрдд рдХреА рдЪрд░реНрдЪрд╛ рдХреА рдПрдХ рдзреБрдВрдзрд▓реА рд╕реНрдореГрддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛ рд░рд╣рд╛ рд╣реИ - рдХреНрдпрд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдерд╛?
рдирдорд╕реНрддреЗ,
рдореЗрд░реЗ рдерд░реНрдореЛ, рддрд░рд▓ рдкрджрд╛рд░реНрде, рдФрд░ рдЖрд░рдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ numpy рдХреЗ assert_allclose рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣ рдзрд╛рдЧрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдмрд╣реБрдд рд╣реА рдЦрддрд░рдирд╛рдХ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд░реВрдкрддрд╛ рдФрд░ / рдпрд╛ рдПрдЯреЛрд▓ рдФрд░ рдЖрд░рдЯреАрдУрдПрд▓ рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдХрд╛рд░рдг рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреАрдбрд╝реЗ рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдЯреЛрд▓ (assert_allclose рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ) , рдореБрдЭреЗ рдкрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рдХреАрдбрд╝реЗ рд╣реИрдВ, рдФрд░ assert_allclose рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдХреНрд░реВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╣реИрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ assert_allclose рдХрд╛ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ - рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рдорд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдлреБрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ assert_allclose рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рдорд╛рдгреЛрдВ рдХреЗ ints рдФрд░ рдлреНрд▓реЛрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ rtol рдпрд╛ atol рдХреЛ рдЪреБрдирдиреЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╕реЛрдЪрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдПрдХ atol рдпрд╛ rtol рдХреЛ рдХрдо рд╕рдЦреНрдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреНрд░рдорд╢рдГ 13159, 1178 рдФрд░ 4243 рдмрд╛рд░ assert_allclose рдХрд╣рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПред рдореБрдЭреЗ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рдирдпрд╛ рдмрдЧ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛ ; рдПрдХрдорд╛рддреНрд░ рдкрд░реАрдХреНрд╖рдг рдЕрд╕рдлрд▓рддрд╛ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рд╡рд╣ assert_allclose рдХреЗ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдереАред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧ рднреА рд╣реИрдВ рдЬреЛ рдХрдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реЛрдВрдЧреЗ, рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЪреАрдЬ assert_allclose рдпрд╛ isclose рдореЗрдВ рдмрджрд▓реА рдЬрд╛рддреА рд╣реИ рддреЛ рдЗрд╕реЗ рдПрдХ рдореБрджреНрджреЗ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдЧрд░ рдореИрдВ рдПрдХ assert_allclose рд╡рд┐рдзрд╛ рдЬреЛ рдХрд┐ math.allclose рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рдерд╛, рддреЛ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг рдорд╣рд╕реВрд╕ рдХрд░реВрдБрдЧрд╛, рдЪрд╛рд╣реЗ рд╡рд╣ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдпрд╛ symmetric
рдзреНрд╡рдЬ рд╣реЛред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рдФрд░ рдкреАрдЖрд░ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рджреЛрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рднреА рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рдЖрд░рд╛рдо рдорд┐рд▓рд╛ рд╣реИ!
11 рджрд┐рд╕рдВрдмрд░, 2017 рдХреЛ рд╢рд╛рдо 5:01 рдмрдЬреЗ, рдирдерд╛рдирд┐рдПрд▓ рдЬреЗред рд╕реНрдорд┐рде рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
рдХрд╛ред
рдзрдиреНрдпрд╡рд╛рдж, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯрдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реА рдмрд╛рдд рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рдмрддрд╛рддрд╛ рд╣реИ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдЯреЛрд▓ - 0.0 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЦрддрд░рдирд╛рдХ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рджреЛ рд╕рд╛рд▓ рдореЗрдВ рдпрд╣ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдВрдд рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░реЛ?
рд╢рд╛рдпрдж рдпрд╣ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рдорд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╡реЗ рдЫреЛрдЯреА рдЭреБрдВрдЭрд▓рд╛рд╣рдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
рд╕рдордп рдХреЗ рд╕рд╛рдеред
рдФрд░ рдЬрдм рдореИрдВ рдЖрднрд╛рд░реА рд╣реВрдВ рдХрд┐ assert_allclose рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реИ
(рдореЗрд░реА рдмрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк рди рдХрд░реЗрдВ
рд╕рд╣рдордд рд╣реВрдБ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ) рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ - рдФрд░ рдЕрдзрд┐рдХ рд╣рд░ рд╕рдордп - рдирд╣реАрдВ рд╣реИрдВ
unittest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реАрдзреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ np.all_close рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рд╣рд╛рдБ рд░рд╛рд▓реНрдл, рдЕрдЧрд░ рд╣рдо рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рддреАрдиреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ
рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп :-( рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ рдореМрдХрд╛ рджреЗрддрд╛ рд╣реИ
рдЕрдзрд┐рдХ рд▓рдЧрд╛рддрд╛рд░, рдПрдХ рдмреЛрдирд╕?
рдЬрдмрдХрд┐ py2-3 рд╕рдВрдХреНрд░рдордг рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдХреБрдЫ рд╣реЛрдирд╛ рд╣реИ
рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ "рдореМрд╕рд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рдареАрдХ рд╣реИ" рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ :-)
рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ is_close
(рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рддрд░) atol=0
рдХрд╛ рдЧрдгрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ None
рдмрджрд▓реЗрдВ, рдФрд░ atol=0
рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ; рдЕрдЧрд░ рд╕рднреА True
рд╕рд┐рд░реНрдл рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ; рдЕрдЧрд░ рдХреБрдЫ False
, рдорд╛рдирдХ atol
рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЪреЗрддрд╛рд╡рдиреА (рдФрд░ "рдкреБрд░рд╛рдирд╛" рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВ)ред
рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛрдиреЛрдВ рд╕рдорд░реВрдкрддрд╛ рдФрд░ рдПрдЯреЛрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд, рд╣рдореЗрд╢рд╛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рд▓рдЧрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдорд░реВрдкрддрд╛ рдХреА рдХрдореА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ atol
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдЕрдзрд┐рдХ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ ...
рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рди рд╣реЛ, рдореИрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВ
рдЖрдк рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдпрджрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЙрдкрдХрд░рдгред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ
рдЕрдм рднреА рдореЗрдЬ рдкрд░ред
Py3k рд╕рдВрдХреНрд░рдордг рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдХрднреА рднреА рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдПрдХ рд░реЛрд▓ рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИред рдХреНрд▓реАрдирдЕрдк рдХреЛ рдПрдХ рдмрдбрд╝реА рд░рд┐рд▓реАрдЬ рдореЗрдВ рд░реЛрд▓ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ
рдЖрдИрдПрдордУ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред
рдЬрдмрдХрд┐ py2-3 рд╕рдВрдХреНрд░рдордг рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ "рдореМрд╕рд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ" рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛рдирд╛ рд╣реИ :-)
рдмрд╕ рдРрд╕реЗ рд╣реА рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ: рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреНрд░рдордг рдпреЛрдЬрдирд╛ рд╣реИ рдХрд┐ рджрд░реНрдж рдХреЗ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╣реИ рдФрд░ рд▓рд╛рдн рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдореМрд╕рд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ рд▓рд╛рдЧрддред рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдпрд╣ рдХрд┐ рд╣рдордиреЗ "рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛"ред (рдпрджрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛рд╢реАрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкрд░рд┐рдгрд╛рдорд╡рд╛рджреА рд╣реИрдВ , рди рдХрд┐ рдордиреЛрдЪрд┐рдХрд┐рддреНрд╕рдХ ред) рдЗрд╕рд▓рд┐рдП "рдХреЗрд╡рд▓ рдпрд╣реА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рди рддреЛрдбрд╝рддрд╛ рд╣реИ" рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред IMO рдХреЛ рдПрдХ рд╕рд╛рде рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдн рдЖрдорддреМрд░ рдкрд░ рдорд╛рдореВрд▓реА рд╣реЛрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рд╕рднреА рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдВ - рдЯреВрдЯреЗ рд╣реБрдП рдХреЛрдб рдЯреВрдЯреЗ рд╣реБрдП рдХреЛрдб рд╣реИрдВ - рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИ рдХрд┐ рд╡реЗ "рдирд╣реАрдВ" рд╕реЗ рд▓рд╛рдЧрдд / рд▓рд╛рдн рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЯрд┐рдк рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рдБ"ред
рдПрдЯреЛрд▓ рдиреЙрди-рдЬреАрд░реЛ рдбрд┐рдлреЙрд▓реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде) рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣рдо рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реЛрддреЗ рд╣реИрдВ рдЖрд▓рд╕реА - рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрддреЗ рд╣реИрдВ, ans рдпрджрд┐ рдпрд╣ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред (рдЬрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдореИрдВ рд╡рд╛рдкрд╕ y рдХреЛрдб рдкрд░ рдЧрдпрд╛, рдФрд░ DID рдиреЗ рдЙрди рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдвреВрдВрдврд╛ - рд╡реВрдкреНрд╕!
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдЯреИрдЯрдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реА рдмрд╛рдд рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдЯреЛрд▓ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИ - 0.0 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЦрддрд░рдирд╛рдХ рдирд╣реАрдВ рд╣реИред [...] рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд - рдФрд░ рдЕрдзрд┐рдХ рд╣рд░ рд╕рдордп - рдПрдХрддрд░рдлрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реАрдзреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ np.all_close рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
"рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ рдХреБрдЫ рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдирд┐рд░рдВрддрд░рддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП" рд▓рд╛рдЧрдд / рд▓рд╛рдн рдкреИрдорд╛рдиреЗ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕реНрдХреЛрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред "рд╕реБрдиреНрди рдХреЗ рдЕрдВрджрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рди рдХреЗрд╡рд▓ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рддрд░рд╣ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдореВрдХ рдХреАрдбрд╝реЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдореНрдореЛрд╣рдХ рд╣реИред рдореИрдВрдиреЗ рдЦреБрдж рдЕрднреА рддрдХ рдПрдХ рд░рд╛рдп рдирд╣реАрдВ рдмрдирд╛рдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдпрд╣рд╛рдВ рдкреНрд░рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдЬреЛрд░ рджреВрдВрдЧрд╛ред
рдПрдХ рдиреЛрдЯ:
"" "рдореИрдВрдиреЗ rtol рдпрд╛ atol рдЪреБрдирдиреЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╕реЛрдЪрд╛ рд╣реИ,
рдХреЗрд╡рд▓ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдПрдХ рдПрдЯреЛрд▓ рдЬреЛрдбрд╝рдирд╛
-snip-
$ рдХреЙрд▓ рдХреНрд░рдорд╢рдГ 13159, 1178, рдФрд░ 4243 рдмрд╛рд░ assert_allcloseред
-snip-
рдореБрдЭреЗ рдХреЛрдИ рдирдпрд╛ рдмрдЧ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛ ;
"" "
рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ assert_allclose рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реИред рддрдерд╛
рдЗрд╕рд▓рд┐рдП :-)
@njsmith рдиреЗ рд▓рд┐рдЦрд╛:
"рд╣рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░рддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП"
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рдХреЛрдИ рднреА рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ - рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдирд╣реАрдВред рдПрдХрдорд╛рддреНрд░ рд╕рдВрдЧрдд рдХреЛрдИ рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рд╕рдВрдмрдВрдзрд┐рдд рд╕реБрдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рд░рддрд╛ рд╣реИред
"рд╕реБрдкреА рдХреЗ рдЕрдВрджрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рди рдХреЗрд╡рд▓ рднреНрд░рдорд┐рдд рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдореВрдХ рдХреАрдбрд╝реЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"
рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдХрдо рд╕реЗ рдХрдо рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдиреНрдпред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдмрд┐рдирд╛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд┐рдЫрдбрд╝реА рд╣реБрдИ рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдирд╛, рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЧрдВрднреАрд░ рд╣реИ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрдкрдЪрдпрди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рдеред
рдпрд╛
рдПрдХ рдирдпрд╛ рдЭрдВрдбрд╛ рдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдирд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдкреБрд░рд╛рдирд╛ рдХреЛрдб рдЬрдм рддрдХ рдЪрд╛рд╣реЗ рддрдм рддрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рдирдпрд╛ рдХреЛрдб рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЦреЛрдЬ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд (рдпрд╛ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЖрдпрд╛рдд) рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
(рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЯреЗрд╕реНрдЯ рдХреЛрдб рдореЗрдВ рднреА рдмрдВрджрд░ рдХреЗ рдЦрд╕рдЦрд╕ тАЛтАЛрдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ....)
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ:
allclose
assert_allclose
assert_almost_equal
assert_approx_equal
assert_array_almost_equal
assert_array_almost_equal_nulp
assert_array_max_ulp
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдлрд░реНрдХ рдкрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рдЦреИрд░, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдФрд░ рдореИрде.рд╕реНрдХреЙрд▓реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╣рдордиреЗ рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рддреЛ, рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЗрд╣рддрд░ рд╣реИред
рддреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВ numpy.testing
рдХреЗ рдореБрдЦреНрдп рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд░рд╣рд╛ рд╣реВрдВ - рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рдирдпрд╛ рдореБрджреНрджрд╛ рд╣реИред рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреНрд░рд╣ рдХрд░рдирд╛ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП, рдмреЗрд╣рддрд░, рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рд╣реЛрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ (рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдЬрд╝рд░реВрд░, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЪрд░реНрдЪрд╛ рд╣реЛ,
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
"рдПрдХ рджрд╢рдХ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╡рд┐рдЪрд╛рд░ рд╣реИ" рдЪрд░реНрдЪрд╛ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ
рдирд╣реАрдВ, рдпрд╣ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рдЬрди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрдИ рдХреЛрд░ рджреЗрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдгрдп рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╣рд╛рдЬ @njsmith , @pv , @charris рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕реЗ рд░рд╡рд╛рдирд╛ рд╣реБрдЖ рд╣реИред
рдореИрдВ рдЗрд╕ rehashing рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди assert_allclose
(рдХрдо рд╕реЗ рдХрдо рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛) рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, isclose
рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкреВрд░реНрдг рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдорд╛рдирддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЛрдВ рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдЧрд╛рд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП np.isclose
рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рд▓ рдмреЙрдХреНрд╕ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд╣ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ?
рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди assert_allclose рд╣реИ
рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рдХрд╛рдлреА рдХрд░реАрдм)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, isclose рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ
рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдорд╛рдирддрд╛ рд╣реИ
рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдореИрдВ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рд▓ рдмреЙрдХреНрд╕ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП np.isclose рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрдаред рдХреИрд╕реЗ
рд╡реЛ рдЖрд╡рд╛рдЬрд╝?
+1
рдореЗрд░реА рд╕рд╣рдорддрд┐ рд╣реИ рдХрд┐ рдбреЙрдХреНрд╕ рдмреЗрд╣рддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдзрдиреНрдпрд╡рд╛рдж,
-CHB
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/10161#issuecomment-351182296 , рдпрд╛ рдореНрдпреВрдЯ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AA38YDw4sdhRWYmeeyr4met1RCwWsjMQks5s_uBmgaJpZM4Q2J-P
ред
рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдЙрддрдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
.. рдЪреЗрддрд╛рд╡рдиреА :: рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ
atol
рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ
рдПрдХ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рднреА рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ atol
_is_ рдЙрдкрдпреБрдХреНрдд рдЬрдм рдЖрдк рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ 1e-8
рд╕реЗ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдореМрдЬреВрдж рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдбрд┐рдлрд╝реЙрд▓реНрдЯ atol
_is not_ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрдм рдЖрдк рд╕рд╛рд░реНрдердХ рд░реВрдк рдореЗрдВ 1e-8
рд╕реЗ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдпрд╣ рдирд╣реАрдВ рдорд╛рдирддреЗ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░ рд╕рднреА рдХреЛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, @xoviat , рд╕рдмрд╕реЗ рдЧрд╣рд░реА рдЗрдЬреНрдЬрдд рдХреЗ рд╕рд╛рде, рдореИрдВ рдЖрдкрдХреЗ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдмрдпрд╛рди рдкрд░ рдХрдбрд╝реА рдЖрдкрддреНрддрд┐
...
assert_allclose
_is_ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рдХрд░реАрдм рдкрд░реНрдпрд╛рдкреНрдд)ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдбреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ _what_ atol
рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди _why_ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдХрдм рдмрджрд▓рдирд╛ рд╣реИ ред
рдореИрдВ рдХреБрдЫ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:
" atol
рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдиреЙрдирдЬрд╝рд░реЛ рдореВрд▓реНрдп рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдПрдХ рдХреЛ рдЙрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, atol
рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рдорд▓рд╛ред atol
, рдЬреЛ atol
рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рд░реНрдердХ (рд╢реВрдиреНрдп рд╕реЗ рдЕрд▓рдЧ) рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ atol
рд╕реЗ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирдЧрдгреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред (рд╢реВрдиреНрдп рдХреЗ рд╕рдорд╛рди)
рдЕрдВрдд рдореЗрдВ, рдореИрдВ isclose
рдФрд░ allclose
рдХреЗ рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХ рд╣реА рдиреЛрдЯ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред
рдпрд╣ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИред рдЗрд╕реЗ рдЧреНрд░рд╣рдг рдХрд░реЗрдВ рдпрд╛ рдЫреЛрдбрд╝ рджреЗрдВред
рдЪреАрдпрд░реНрд╕ред
рдХреГрдкрдпрд╛ рдкреАрдЖрд░ рдкрд░ рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЫреЛрдбрд╝ рджреЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ IMO рд╣реИред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрдЧрд░ рдореБрдЭреЗ рдмрд╣реБрдд рдЧреБрд╕реНрд╕рд╛ рдЖ рд░рд╣рд╛ рд╣реИ - рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ рдЖрдо рд╕рд╣рдорддрд┐ рдереАред
@xoviat : рдбреЙрдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЪреВрдВрдХрд┐ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдЖрдПрдЧрд╛, рдореИрдВ (рд╢рд╛рдпрдж) рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ рдЕрдВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ NEP рдХреЗ рдПрдХ рдорд┐рдиреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓рд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдФрд░ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ред рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП - рдкрд┐рдЫрд▓реЗ рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рддрд░рд╣ рдХрд╛ рдкреЗрдЯ рдЖрдЙрдЯред
Py2 / 3 рдЕрдВрдХ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рдЪрд╛рд╣реЗ / рдХреИрд╕реЗ рд╕реБрдиреНрди рдореЗрдВ рдореМрд╕рд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЬрдЧрд╣ рдФрд░ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░реНрдЪрд╛ рд╣реИред
isclose()
рд╕рд╛рде рдореБрджреНрджрд╛рдпрд╣ рдореБрджреНрджрд╛ (рдФрд░ рдЕрдиреНрдп рд╕рдВрджрд░реНрднрд┐рдд) рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдХрд┐ numpy.isclose()
рдФрд░ рджреЛрд╕реНрдд рдЗрд╖реНрдЯрддрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реЗ рдХрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдПрдЯреЛрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреВрдХ рд╣реИрдВред рдпрд╣ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреНрд░рдо рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЭреВрдареЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ atol
рдореВрд▓реНрдп рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, stdlib рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди: math.isclose()
, рдПрдХ рдЕрд▓рдЧ, рдФрд░ рдпрдХреАрдирди рдмреЗрд╣рддрд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдПрдХ рд╕рдордорд┐рддреАрдп рдкрд░реАрдХреНрд╖рдг рд╣реИ, рдпрд╣ rtol рдФрд░ atol рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд░реНрддрд┐ 0.0 рд╣реИ
рдирд┐рдХрдЯ-рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдХрд╛рдлреА рдмреБрд░рд╛ рд╣реИред
рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдиреЗ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрд╡рдзреАрдХрд░рдг рдЕрд╡рдзрд┐ рдФрд░ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде - рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рдмрдбрд╝реА рдЭреБрдВрдЭрд▓рд╛рд╣рдЯ рд╣реЛрдЧреАред
рдпрд╣ рдХреЛрдИ рдореМрдЬреВрджрд╛ рдХреЛрдб рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмрджрд╕реВрд░рдд рдФрд░ рднреНрд░рдорд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред
TLDR: рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рди рдпрд╛ рд╕рд╛рдл рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рдЗрд╕ рдХрд╛ рдкреАрдЫрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддреАрдд рд╣реБрдЖ, рдЬрд┐рд╕рдиреЗ рдХрд┐рд╕реА рднреА рдХрд░реНрд╖рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрд░ рджреЗрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдерд╛ред
рдЗрд╕реЗ "рдареАрдХ" рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдл рддрд░реАрдХрд╛ рдПрдХ рдирдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдЪреВрдХ рдХреЗ рд╕рд╛рде рдПрдХ np.rel_close()
[рдпрд╛ рдЕрдиреНрдп рдирд╛рдо] рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рд╕рдВрднрд╡рддрдГ math.isclose
рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗред рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдиреБрд╢рдВрд╕рд┐рдд" рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡реГрджреНрдзрд╛рд╡рд╕реНрдерд╛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ - рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╢реЛрд░ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЙрдкрдХрд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЗрд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреМрди рдРрд╕рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ рджреЛ рд╕рдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛, рдФрд░ "рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рдХреЗрд╡рд▓ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде, рдЬреЛ рдПрдХ рджрд╢рдХ рддрдХ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╡рд┐рдЪрд╛рд░ рд╣реИред"
рдпрд╣ рдЫреЛрдЯреЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рдбреЙрдХреНрд╕ рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: # 10214
рдореИрдВ рдЕрднреА рднреА рдПрдХ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рд╢реЗрд╖ рд╣реВрдВ:
@njsmith рдиреЗ рд▓рд┐рдЦрд╛:
"" "
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ:
allclose
assert_allclose
assert_almost_equal
assert_approx_equal
assert_array_almost_equal
assert_array_almost_equal_nulp
assert_array_max_ulp
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдлрд░реНрдХ рдкрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
"" "
рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдареАрдХ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛?
рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░реВрдВрдЧрд╛:
рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореБрдЦрд░ рд╣реИрдВ - рдФрд░ рдореБрдЦрд░рддрд╛ рдХрд╛ рдкреНрд░рд╕рд╛рд░ рдПрдХрддрд░рдлрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдПрдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИред
рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ) рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрдЦрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рддреЛ numpy.testing
рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВ рдХреНрдпрд╛ рдЕрд▓рдЧ рд╕реЗ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ рдЬреЛ рдХрд┐ рдЦрд╕реНрддрд╛ рдХреЛрд░ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред
рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ) рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрдЦрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рджрд░рдЕрд╕рд▓, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЦрддрд░рд╛ рд╣реИред рдЯреЗрд╕реНрдЯ рдХреЛ assert_allclose(...)
рд╕реЗ assert np.allclose(...)
рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЪреБрдкрдЪрд╛рдк рдХрдо рд╕рдЦреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдПрдХ рдмреБрд░реА рдмрд╛рдд рд╣реИред
рдореИрдВ рдЕрднреА рднреА pytest рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ assert_allclose
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИ:
def test_shs():
a = [0.1, 0.2, 0.3, 0.4]
b = [0.2, 0.3, 0.3, 0.4]
> np.testing.assert_allclose(a,b)
E AssertionError:
E Not equal to tolerance rtol=1e-07, atol=0
E
E (mismatch 50.0%)
E x: array([ 0.1, 0.2, 0.3, 0.4])
E y: array([ 0.2, 0.3, 0.3, 0.4])
рдмрдирд╛рдо assert np.allclose()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
def test_shs():
a = [0.1, 0.2, 0.3, 0.4]
b = [0.2, 0.3, 0.3, 0.4]
> assert np.allclose(a, b)
E assert False
E + where False = <function allclose at 0x7f20b13c9840>([0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.3, 0.4])
E + where <function allclose at 0x7f20b13c9840> = np.allclose
рдпрд╣ рдареАрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ pytest_assertrepr_compare
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ pytest рднреА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
@ eric-wieser: рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ:
"рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЦрддрд░рд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг assert_allclose (...) рд╕реЗ asp np.allclose (...) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЪреБрдкрдЪрд╛рдк рдХрдо рд╕рдЦреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ рдПрдХ рдмреБрд░реА рдмрд╛рдд рд╣реИред"
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рдмрд╛рдд - рдпрд╣ рдорд╛рдирдиреЗ рдХрд╛ "рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░" рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрднреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ isclose () рдФрд░ allclose () рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ - рдПрдХ рдЖрджрд░реНрд╢ рдореЗрдВ рджреБрдирд┐рдпрд╛ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдареАрдХ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛?
рдирд╣реАрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдЧрднрдЧ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдореЗрдирдЬрд╛рд░реНрдЗ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рддрдХ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдиреЛрдЯрд┐рд╕ рдпрд╛ рд╕рдордЭрдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░реВрдВрдЧрд╛:
рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореБрдЦрд░ рд╣реИрдВ - рдФрд░ рдореБрдЦрд░рддрд╛ рдХрд╛ рдкреНрд░рд╕рд╛рд░ рдПрдХрддрд░рдлрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдПрдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИред
рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ) рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрдЦрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рд╡реЗ рдореБрдЦрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди AFAICT рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд▓рдЧрднрдЧ рдмрд░рд╛рдмрд░" рдХреА рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреЗрдж рдЗрддрдиреЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдХрд┐ рдореИрдВ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рд╡реЗ рдЕрд╕рд▓реА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред)
рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ / рдпрд╛ рдЪреВрдХ рдХреЛ рдмрджрд▓рдирд╛:
рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдиреЗ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрд╡рдзреАрдХрд░рдг рдЕрд╡рдзрд┐ рдФрд░ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде - рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рдмрдбрд╝реА рдЭреБрдВрдЭрд▓рд╛рд╣рдЯ рд╣реЛрдЧреАред
рдореИрдВ рдХрд╛рдлреА рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдбрд╛рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧрдд рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рд╛рдн рд╣реЛрдЧрд╛ред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рд╡реЗ рдХрд░реЗрдВрдЧреЗ , рдФрд░ рдореИрдВ рдЕрдиреНрдп рдореБрдЦреНрдп рджреЗрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛; рдореИрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рд░реВрдврд╝рд┐рд╡рд╛рдж рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЧрд▓рддреА рдХрд░рдирд╛ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рджреЗрдЦреВрдВрдЧрд╛ :-)ред
рдЬреИрд╕реЗ, рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдФрд░ рдХрд╣рд╛ "рдореИрдВрдиреЗ 3 рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЕрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдмрджрд▓рд╛рд╡ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЗрд╕рд╕реЗ 10,000 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ 12 рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдлрд▓рддрд╛рдПрдВ рд╣реБрдИрдВ, рдФрд░ рдЙрди 12 рдореЗрдВ рд╕реЗ 8 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрди рдХреАрдбрд╝реЗ рдереЗ рдЬреЛ рдкреБрд░рд╛рдиреЗ рджреНрд╡рд╛рд░рд╛ рдЫрд┐рдкрд╛рдП рдЧрдП рдереЗ рдмреБрд░рд╛ рдЪреВрдХ "... рдЬреЛ рдмрд╣реБрдд рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдХреАрд░реНрдг рд░реВрдк рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреА рддрдХрдиреАрдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИред
рд╕реЛрдо, 18 рджрд┐рд╕рдВрдмрд░, 2017 рдХреЛ рджреЛрдкрд╣рд░ 3:57 рдмрдЬреЗ, рдирд╛рдердирд┐рдпрд▓ рдЬреЗред рд╕реНрдорд┐рде <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:
рдирд╣реАрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреНрд░рд╛рдореАрдг рд╣реИ
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд▓рдЧрднрдЧ-рдмрд░рд╛рдмрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рдереЛрдбрд╝рд╛-рдЕрд▓рдЧ рддрд░реАрдХреЗ
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реВрдЪрдирд╛ рдХреЛ рдиреЛрдЯрд┐рд╕ рдпрд╛ рд╕рдордЭрдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдЦреИрд░, рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ - рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рдпрд╛ рдерд╛
рдХреБрдЫ рдЕрд▓рдЧ рд╣реИ , рдФрд░ рдЪрд▓ рдмрд┐рдиреНрджреБ рдХреА рдпреЛрдирд┐ рдХреЗ рд╕рд╛рде, рдЙрди
рдорддрднреЗрдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдирдпрд╛ рд░рд┐рд╢реНрддреЗрджрд╛рд░-рдирд┐рдХрдЯрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди
рдЕрдЪреНрдЫреЗ рд╕реЗ рдХрд░реЛ"ред рдФрд░ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП
рдкреБрд░рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдФрд░ рд╢рд╛рдпрдж рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ)ред
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддрд░реНрдХ рд╣реИ рдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИ,
рд╣рд╛рд▓рд╛рдВрдХрд┐ред
рдЬреИрд╕реЗ, рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдФрд░ рдХрд╣рд╛ "рдореИрдВрдиреЗ 3 рдмрдбрд╝реЗ рдкрд░ рдЕрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдмрджрд▓рд╛рд╡ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ, рдФрд░ рдпрд╣ 10,000 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ 12 рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ
12, рдЙрдирдореЗрдВ рд╕реЗ 8 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрдХ рдХреАрдбрд╝реЗ рдереЗ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдмреБрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЫрд┐рдкрд╛рдП рдЧрдП рдереЗ
рдЪреВрдХ "... рдХрд┐ рдмрд╣реБрдд рд╕рдордЭрд╛рдиреЗ рдХреА рд╣реЛрдЧреАред рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдпрд╣ рдПрдХ рд╣реИ
рдорд╛рдорд▓рд╛ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдХреАрд░реНрдг рд▓рдХреНрд╖рд┐рдд рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдХрд░рдиреЗ рдХреА рддрдХрдиреАрдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ
рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ, рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИредрд╣рдореНрдо, рдореЗрд░реЗ рдХреЛрдб рдЖрдзрд╛рд░ рдореЗрдВ рд▓рдЧрднрдЧ 1500 рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ - 10,000 рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдП
рд╢реЙрдЯред рдпрджрд┐ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ, рддреЛ рдореБрдЭреЗ рдПрдХ рдмрдЧ рдпрд╛ рдЦрд░рд╛рдм рдкрд░реАрдХреНрд╖рдг рдпрд╛ рджреЛ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдЕрдзрд┐рдХ рдорд┐рд▓рддрд╛ рд╣реИ
рдЖрд╢реНрд╡рд╛рд╕рди!
рд╕рднреА рдХреЛ рдкреНрд░рдгрд╛рдо,
рдПрдХ рд╕рд╣рдХрд░реНрдореА рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣рд╛рдВ рдЭрдВрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
_ рдЕрд╕реНрд╡реАрдХрд░рдг: рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд╣реЙрд▓ рдореЗрдВ рдЖрдЧ" рдЪрд┐рд▓реНрд▓рд╛рдХрд░ рдФрд░ рдмрд╛рдбрд╝ рдкрд░ рдлреЗрдВрдХрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЛ рдмрд╣реБрдд рд╕реЛрдЪрд╛ рдирд╣реАрдВ рдерд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдПрдХ рд╢рд░реНрдордирд╛рдХ рд╣реИрд╢ рдмрдирд╛рдпрд╛ рд╣реИ, рджрдпрд╛рд▓реБ рдмрдиреЛ, рдмрд╣реБрдд рдХреГрдкрдпрд╛ ред_
рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рдХреНрд▓рд╛рд╕рд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ / рдбрд┐рдЬрд╛рдЗрди "рдЪрд┐рдХрди рдФрд░ рдЕрдВрдбрд╛" рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдо рд╢рдмреНрджрд╛рд░реНрдеред рд╕рднреА рдХреАрдбрд╝реЗ рдХреЛрдб рдХреЗ рднреАрддрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рдХрднреА-рдХрднреА рд╡реЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рднреАрддрд░ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ (рдпрджрд┐ рд╕рднреА рдкрд░) рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдердо рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ - рдмрдЧ рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рдпрд╣ рдЕрднреА рднреА рдмрдЧ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдордЬрд╛рдХ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИ "рдпрд╣ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ"ред рдмреЗрд╢рдХ, рдПрдХ "рд╡рд┐рдХрд▓реНрдк" рдмрд╕ рдЗрддрдирд╛ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди IMHO рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рддрд░реНрдХ рдХреЗ рдЕрдВрдд рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ - рдпрджрд┐ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рднреА рд╢рд╛рдВрдд рд╣реИ, рдЪрд░реНрдЪрд╛ рдХрд╛ рдЕрдВрддред
рддреЛ isclose()
рдХреЗ "рд╡рд╛рдВрдЫрд┐рдд" рдФрд░ / рдпрд╛ "рдЕрдкреЗрдХреНрд╖рд┐рдд" рд╢рдмреНрджрд╛рд░реНрде рдХреНрдпрд╛ рд╣реИрдВред рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╢рдмреНрджреЛрдВ рдкрд░ рдЕрднрд┐рдкреНрд░реЗрд░рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред "рдХрд░реАрдм" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ред
рдЪреВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдЕрдВрддрддрдГ рдХрд┐рд╕реА рднреА рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк _is_ рдЦрддрд░рдирд╛рдХ рд╣реИред рдпрджрд┐ abs(a - b) == 0
рд▓рд┐рдП рдЙрдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░ рд╢реВрдиреНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ _only_ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд▓рдд рдЦрд▓рдирд╛рдпрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░рд╛рдЬреНрдп рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡рд░рдг рд╣реИред "рд╢реВрдиреНрдп" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ "wiggle рдХрдорд░рд╛" рдирд╣реАрдВ рд╣реИ, рдЬрдм рдЕрдВрддрд░ рд╢реВрдиреНрдп рд╣реИ, рдпрд╣ рд╕реНрд╡-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛрдиреЗ рдХрд╛ рдкрддреНрдерд░ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡реЗ _close_ рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ _exact_ рд╣реИрдВ - рдЬрд╣рд╛рдВ "рдХрд░реАрдм" рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдкреЗрдХреНрд╖ рд╡рд┐рдЪрд▓рди рд╣реИ ред (_Note: _ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рд╕рд╢рд░реНрдд рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдирд╣реАрдВ)ред)
+
рдмрдирд╛рдо max
rel_tol
рдФрд░ a_tol
рдХрд╛ рдорд┐рд╢реНрд░рдг рдпрд╛ "рд╢реЗрдбрд┐рдВрдЧ" рдПрдХ рдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд╛рд░рдг рдФрд░ max
_does_ рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рди рддреЛрдбрд╝реЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА "рдХрд░реАрдм" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЧреИрд░-рддреБрдЪреНрдЫ рддрд░реАрдХреЗ рд╕реЗ рдмрдВрдзреА рд╣реБрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдордВрдЧрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП "рд░рд┐рд╢реНрддреЗрджрд╛рд░" рдФрд░ "рдирд┐рд░рдкреЗрдХреНрд╖" рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЙрдкрд░реЛрдХреНрдд рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рдкрд╣рд▓реВ _is_ рдПрдХ рдмрдЧ рд╣реИред рдореБрдЭреЗ @gasparka рд▓рдЧрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдЦреЛрд▓рдирд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдХрд╛ рдПрдХ рдЕрдХрд╛рдЯреНрдп рддрд░реНрдХ рд╣реИред
рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ: -
a-b
, рдФрд░ <=
|a-b| <= f(a, b, atol, rtol)
ред рдЬрдм рднреА рдШрдЯрд╛рд╡ рдПрдВрдЯреАрдХреЛрдореЗрдЯрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рддреЛ |a - b|
рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд░рд╛рд╣рдиреАрдп рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрдХреЗрд▓реЗ f(a, b, atol, rtol)
рдХреЗ рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡ рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдордЬрдмреВрдд рдФрд░ рдХрдордЬреЛрд░ рддрд░реНрдХ рд╣реИред
|a - b|
рдХрд╛ рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡рд┐рдЯреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ f(a, b, atol, rtol)
, рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ, f(a, b, atol, rtol)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдкреНрд░рд╢реНрди рд▓реЗрдХрд┐рди isClose(a, b, atol, rtol)
ред рдпрд╣рд╛рдБ рдЧрдгрдирд╛ |a - b|
рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдЕрд░реНрдерд╛рдд isClose() := |a-b| <= f(a, b, atol, rtol)
ред рдЪреВрдБрдХрд┐ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд╣реИ рдФрд░ a
рдФрд░ b
рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, |a-b|
рд▓рд┐рдП рд╕рд░рд╛рд╣рдиреАрдп isClose()
рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ |a-b|
рдХрдордиреАрдпрддрд╛ рдХреЗ рд╕рднреА рдЕрд░реНрде рд╣реИрдВред<=
<
, рдЗрд╕рд▓рд┐рдП рддреБрд▓рдирд╛ рдХреЗ рд╕рдорд╛рдирддрд╛ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ |a-b| = f(a, b, atol, rtol)
рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ f(a, b, atol, rtol)
_must_ рднреА рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдирддрд╛ _never_ true рд╣реИ ( a
рдФрд░ b
рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ) рдпрд╛ рдХрд┐ рд╕рдЦреНрдд рдЕрд╕рдорд╛рдирддрд╛, <
, рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рдмреНрджрд╛рд░реНрде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣реИ рдирд╛?рдЖрдк рдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ) рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕рд╡рд╛рд▓ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@njsmith : рдореБрдЭреЗ рдЕрдВрджрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдереЛрдбрд╝рд╛ рд╕рд╛ рдЗрддрд┐рд╣рд╛рд╕: рдЬрдм рдореИрдВрдиреЗ stdlib рдХреЗ рд▓рд┐рдП isclose рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛, рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди рджрд┐рдЦреЗред рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ рдерд╛, рддреЛ рдореИрдВ рдПрдХ рд╕реБрд╕рдВрдЧрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдХреЗ рд▓рд┐рдП, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рддрд╛ :-)ред
рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рдореБрджрд╛рдп рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП "рд╕рд╣реА" рдХреНрдпрд╛ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рд╣реБрдИ ... рдореИрдВрдиреЗ рдкреАрдИрдкреА рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЕрдЧрд░ рдЖрдк рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ numpy рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://www.python.org/dev/peps/pep-0485/#numpy -isclose
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╡рд╣реА рдмрд┐рдВрджреБ рдмрдирд╛рдП рдЧрдП рдереЗред
рдЕрдВрдд рдореЗрдВ, рддреАрди рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рд╕рд╛рдордиреЗ рдЖрдП:
1) рдПрдХ рд╕рдордорд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред
2) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреВрд░реНрдг рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╢рд╛рдпрдж рд╢реВрдиреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЗ рдкрд░рд┐рдорд╛рдг рдХреЗ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдзрд╛рд░рдгрд╛ рди рдмрдирд╛рдИ рдЬрд╛рдПред
3) "рдХрдордЬрд╝реЛрд░" рдФрд░ "рдордЬрдмреВрдд" рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЫреЛрдЯреЗ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо math.isclose рдХреЗ рд▓рд┐рдП "рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда" рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдПред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ "рдмреЗрд╣рддрд░" рд╣реИ рдЬреЛ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрд╣реБрдд рд╕рд╛рд░реЗ (рдФрд░ рдЕрдЬрдЧрд░) рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рдереАрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдкрдпреЛрдЧреА рдереЗ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореМрдЬреВрджрд╛ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд┐рдирд╛ рдпреЗ рдЪреАрдЬреЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдк-рдЗрд╖реНрдЯрддрдо рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИрдВред рдпрд╣ рдПрдХ рдпреБрд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд (рдФрд░ рдЖрд╡рд╢реНрдпрдХ) рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЕрднреА рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реИред
@njsmith рд╕рд╣реА рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ np.isclose () рдХреЗ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдХрдареЛрд░ FP рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╣реИрдВ, рдмрд▓реНрдХрд┐, np.isclose () рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ
atol
- рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рддрд░реНрдХ рдХреНрд░рдо 1 рдХреЗ рд╣реИрдВ - рдЬреЛ рдмрд╣реБрдд рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ рдЬреЛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред , рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрдЖрдЙрдЪ!
рдФрд░ рд╣рд╛рдБ, рдпрд╣
atol
рдХрд╛рд░рдг рд╣реИ:рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдореБрдЭреЗ рдХреАрд╡рд░реНрдб рддрд░реНрдХ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ - __future__ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред
рдФрд░ рдлрд┐рд░ рд╣рдо рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдбрд┐рдкреНрд░реЗрд╢рди рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдЬрд╛рд░реА рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрддрдГ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдиреАрдЪреЗ рдХреА рдУрд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...