Numpy: рд╡реНрдпрд░реНрде RuntimeWarning clang- рд╕рдВрдХрд▓рд┐рдд np.float32 рджреНрд╡рд╛рд░рд╛ .__ mul__

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  53рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

рд╕рдЧреЗрдорда рдореЗрдВ рд╣рдорд╛рд░реЗ рдЯрд┐рдХрдЯ # 22799 рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ

RuntimeWarning: invalid value encountered in multiply

рдПрдХ рдЧреИрд░-рдЦрд╕реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде numpy.float32 рд╕рдВрдЦреНрдпрд╛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╕рдордп; рдпрд╛рдиреА рдЦрд╛рдореЛрд╢реА рдХреЛ рдЗрд╕ рдЧреБрдгрди рдХреЛ рдЪреБрдкрдЪрд╛рдк рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреАрд╕реАрд╕реА рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ np.float32 рдмрдЬрд╛рдп рдпрд╣ np.float рдпрд╛ np.float128 ред

рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдПрдХ рдХреЛ рдкрд╛рдпрдерди рдХреЙрд▓ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИ

type(numpy.float32('1.5')).__mul__(numpy.float32('1.5'), x)

рдЬрд╣рд╛рдБ x Sagemath рдХреЗ RealField рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЧреБрдгрд╛рдВрдХ рд╡рд╛рд▓реЗ рдПрдХ рд╕реЗрдЬрдореИрде рдпреВрдирд┐рд╡рд░реНрд╕реЗрдЯ рдмрд╣реБрдкрдж рд╣реИред (рдФрд░ рдХреЗрд╡рд▓ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд╣реА рдЗрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ)ред
рдпрд╣реА рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд░реНрдерд╣реАрди рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рд╕реЗрдЬрдорде рдХреЗ рдмрд╛рд╣рд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ; рд╣рдо рдЗрд╕реЗ OSX 11.12 рдкрд░ рдЕрдкрдиреЗ рд╕реНрдЯреЙрдХ рд╕реАрд╕реА (рдХреНрд▓реИрдВрдЧ 3.8 рдХреЗ рдХреБрдЫ рд╡реНрдпреБрддреНрдкрдиреНрди) рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХреНрд▓реЗрдВрдЧ 4.0 рдХреЗ рд╕рд╛рде рдФрд░ рдлреНрд░реАрдмреАрдПрд╕рдбреА 11.0 рдкрд░ рдХреНрд▓реЗрдВрдЧ 4.0 рдпрд╛ рдХреНрд▓реИрдВрдЧ 3.7 рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рд╕рдЧреЗрдорде рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдпрд╣ __mul__ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ ...

рд╣рдо рдЗрд╕реЗ рез.резрез рдкрд░ рдФрд░ рез.резреи рдкрд░ рднреА рджреЗрдЦрддреЗ рд╣реИрдВред

рд╕рднреА 53 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

numpy.float32('1.5').__mul__(x) рд╕рд╛рде-рд╕рд╛рде __add__ рдФрд░ __sub__ рд╕рд╛рде рдПрдХ рд╣реА рдЪрд┐рддреНрд░ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ nan рдпрд╛ infinity ред np.array(x) рд╡рд╛рдкрд╕реА рдХреНрдпрд╛ рд╣реИ?

@ рдПрд░рд┐рдХ-рд╡реЗрд╕рд░: рдпрд╣ array(x, dtype=object) , рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдХреНрдпрд╛ np.multiply(np.float32('1.5'), x) рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ?

numpy.multiply(numpy.float32('1.5'), x) рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред

type(x).__rmul__(numpy.float32('1.5'), x) рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк warnings.filterwarnings('error') рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдорд┐рд▓реЗрдЧрд╛

type(x).__rmul__(numpy.float32('1.5'), x)

TypeError: descriptor '__rmul__' requires a 'sage.structure.element.Element' object but received a 'numpy.float32'

x.__rmul__(numpy.float32('1.5')) рдмрд╕ рдареАрдХ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред

рд▓рдЧрддрд╛ рд╣реИ рдореИрдВ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ rmul рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм type(x).__rmul__(x, numpy.float32('1.5')) , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ x.__rmul__ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ x рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдирд╣реАрдВ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рднреА рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ? np.multiply(np.array(1.5, dtype=object), x) ( filterwarnings рд╕рд╛рде рдЗрд╕ рдмрд╛рд░, рдХреГрдкрдпрд╛)

type(x).__rmul__(x,numpy.float32('1.5')) рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред

рдФрд░, рд╡реИрд╕реЗ, warnings.filterwarnings('error') рд╕реЗрдЯ рдХрд░рдирд╛ рдореБрдЭреЗ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ,

---------------------------------------------------------------------------
RuntimeWarning                            Traceback (most recent call last)
<ipython-input-50-b3ece847d318> in <module>()
sage: np.multiply(np.array(1.5, dtype=object), x)
---------------------------------------------------------------------------
RuntimeWarning                            Traceback (most recent call last)
<ipython-input-52-706823a0b5a2> in <module>()
----> 1  np.multiply(np.array(RealNumber('1.5'), dtype=object), x)

RuntimeWarning: invalid value encountered in multiply

рд╣рдореНрдо, рдЛрд╖рд┐ рдиреЗ рдХреБрдЫ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред float('1.5') рд╕рд╛рде рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?

рдареАрдХ рд╣реИ, рддреЛ рдпрд╣рд╛рдБ рдореБрдЭреЗ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ:

  • Ufunc рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ numpy рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ PyNumber_Multiply рдХреЙрд▓рд┐рдВрдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
  • sage , рдХреБрдЫ FPU рдореЗрдВ рддреНрд░реБрдЯрд┐ рдзреНрд╡рдЬ (рдЛрд╖рд┐ рдореЗрдВ рдмрдЧ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ?
  • numpy рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп fpu рдлреНрд▓реИрдЧ рдЪреЗрдХ рдХреЛ ufunc (рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реВрдк рдореЗрдВ рдмрдЧ?) рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ sage рджреНрд╡рд╛рд░рд╛ рдЙрдирдХреА рддреНрд░реБрдЯрд┐ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ
sage: float(1.5).__mul__(x)
NotImplemented
sage: np.float(1.5).__mul__(x)
NotImplemented
sage: np.float32(1.5).__mul__(x)
/usr/home/dima/Sage/sage/src/bin/sage-ipython:1: RuntimeWarning: invalid value encountered in multiply
  #!/usr/bin/env python
1.50000000000000*x
sage: np.float64(1.5).__mul__(x)
/usr/home/dima/Sage/sage/src/bin/sage-ipython:1: RuntimeWarning: invalid value encountered in multiply
  #!/usr/bin/env python
1.50000000000000*x

рдЕрдиреБрдХреВрд▓рддрд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╡рд░реНрде рдиреЛрдЯрд┐рдВрдЧ np.float is float

np.float32(1.5).__mul__(x) рд░рд┐рдЯрд░реНрди NotImplemented рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реВрдк рдХреЗ рд╕рд╛рде np.multiply рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ float * x рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрд╕ рд▓реВрдк рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЖрд╡рд░рдг, рдЛрд╖рд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд FPU рдЭрдВрдбреЗ рдЙрдард╛ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ x.__rmul__ рдЕрднреА рднреА рд╕реНрдЯреИрдХ рдореЗрдВ рдЧрд╣рд░рд╛ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

sage: np.float32(1.5)*x
/usr/home/dima/Sage/sage/src/bin/sage-ipython:1: RuntimeWarning: invalid value encountered in multiply
  #!/usr/bin/env python
1.50000000000000*x
sage: np.float128(1.5)*x
1.50000000000000*x
sage: np.float64(1.5)*x
/usr/home/dima/Sage/sage/src/bin/sage-ipython:1: RuntimeWarning: invalid value encountered in multiply
  #!/usr/bin/env python
1.50000000000000*x

рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ np.float128 рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди

sage: np.float128(1.5).__mul__(x)
/usr/home/dima/Sage/sage/src/bin/sage-ipython:1: RuntimeWarning: invalid value encountered in multiply
  #!/usr/bin/env python
1.50000000000000*x

рдпрд╣ рдЕрдЬреАрдм рд╣реИред рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдЧ, рд╢рд╛рдпрдж (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЬреАрд╕реАрд╕реА рдкрд░ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдХрд┐рд╕ рдЬрдЧрд╣ рдкрд░?

FPU рдзреНрд╡рдЬ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреНрд▓реИрдВрдЧ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЛрд╖рд┐ рдХреЛрдб рдХреЗ рднреАрддрд░ рдирд╣реАрдВ, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реЛрд░ рдордЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирдореНрдкреА рдХреЛ рджреЛрд╖реА рдард╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрд╣реБрдд рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рдард╣рд░рд╛рдпрд╛ рдЬрд╛рдПред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, numpy FPU рдЭрдВрдбреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдЬреЛ рдЛрд╖рд┐ рдХреЗ рднреАрддрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 1.12 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)

mul = np.vectorize(x.__rmul__)
mul(float('1.5'))

рдХрд╛рдлреА рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд░реАрдм:

/usr/home/dima/Sage/sage/local/lib/python2.7/site-packages/numpy/lib/function_base.py:2652: RuntimeWarning: invalid value encountered in __rmul__ (vectorized)
  outputs = ufunc(*inputs)
array(1.50000000000000*x, dtype=object)

рдареАрдХ рд╣реИ, рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ np.float32 рдпрд╛ np.float64 рд╕рд╛рде рдХреБрдЫ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдпрд╣рд╛рдВ рдХрд┐рдХрд┐рдВрдЧ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рддрдВрддреНрд░ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рд▓реЗрдЦрдХ рдЗрд╕реЗ рдмрдЧ рд╕рдордЭреЗрдВрдЧреЗред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЙрд╕рдореЗрдВ рдХреБрдЫ рдореИрдЬрд┐рдХ рд╕реНрдЯреЗрдЯрд╕ рдлреНрд▓реИрдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рднреА рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрдкрдЯреА рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирдореНрдкреА рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдлрд╝ рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдВрдд рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪрддреА рд╣реИред рддреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ, рдЕрд╕реЗрдВрдмрд▓реА рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ NaN рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдиреАрдЪреЗ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (рдЪреВрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдзреНрд╡рдЬ рд╕реЗрдЯрд┐рдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ), рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рд▓реЛрдЧ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рдХреЛрдб fpu рдЭрдВрдбреЗ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред (рд▓рд┐рдмрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЦреНрдпрд╛рдд рд░реВрдк рд╕реЗ рдЕрд╕рдВрдЧрдд рд╣реИрдВред) рдФрд░ рд╕рдЯреАрдХ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдЯреАрдХ рдПрдПрд╕рдПрдо рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рдирд╣реАрдВред

рд╣рд╛рдВ, рдпрд╣ рдореЗрд░реЗ рд╕рдВрджреЗрд╣ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб

def check_fpu(f):
    @functools.wraps(f)
    def wrapped(*args, **kwargs):
        excluded = list(range(len(args))) + list(kwargs.keys())
        fvec = np.vectorize(f, excluded=excluded)
        return fvec(*args, **kwargs)
    return wrapped

рдПрдХ рдЕрдЬрдЧрд░ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ, рдЖрдк рдХреЛрдб рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕рд╛ рдХреЗ рднреАрддрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рд╣реЛ рд░рд╣рд╛ рд╣реИ; рд╕рдВрдХрд▓рдХ рдЖрдорддреМрд░ рдкрд░ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ NaN рдХреЛ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рдЛрд╖рд┐ рдореЗрдВ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрди рдмрд╣реБрдкрдж рдХреЗ рд▓рд┐рдП рдЧреБрдгрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрдЬреАрдм рдЭрдВрдбрд╛ рд╕реЗрдЯрд┐рдВрдЧ рд╕рдВрднрд╡рддрдГ рд╣рд░ рд╕рдордп рд╣реЛ рд░рд╣реА рд╣реИ, рдФрд░ рдЦреМрдлрдирд╛рдХ рдХреЗрд╡рд▓ рдЙрд╕ рджреГрд╢реНрдп рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ ред

рд╡рд╣рд╛рдБ рднреА рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рд╕реБрдиреНрди рднреА рд╡рд╕реНрддреБ рдЫреЛрд░реЛрдВ рдкрд░ рдЗрди рдЭрдВрдбреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред (рдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдереЛрдбрд╝реЗ рд╕рдХрд▓ рд╣реИ рдФрд░ fpu рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред) рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рд╕реБрдкреАрдлреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

check_fpu() рдХрд╛ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдпрд╣ рд╡рд╣рд╛рдВ fvec = np.vectorize(f, excluded=exclude) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░, рд╣рдо python2 рдкрд░ рд╣реИрдВ: import functools32 as functools ред

functools.wraps рдХреЛ рдЕрдЬрдЧрд░ 3 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?

рдпрджрд┐ setattr() p

AttributeError: 'method-wrapper' object has no attribute '__module__'

рд╣рд╛рдБ, рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдЬреЛ рднреА рдмрд╣реБ-рд╕рдЯреАрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬреЛ RealField рдореЗрдВ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ FPU рдзреНрд╡рдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдпрд╛ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рд╣рд╛рдБ, рдореИрдВ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рд░рд┐рдпрд▓рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЬреЛ рднреА рдмрд╣реБ-рд╕рдЯреАрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ

рдпрд╣ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП MPFR рд╣реИред

рд╣рдо Sagemath рдХреЛ clang + gfortran (рдЕрдзрд┐рдХрддрд░ OSX рдФрд░ FreeBSD рдкрд░, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЬрд╣рд╛рдВ рдХреНрд▓реИрдВрдЧ рдкреНрд░рд╛рдердорд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИ) рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ OSX рдкрд░ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬрд╝ рд╣реЛ (FreeBSD рдПрдХ рд╕рдорд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рд╣реИ) OSX рдФрд░ Apple рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреА рдкрд░реЗрд╢рд╛рдиреА)ред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣рд╛рдВ рдмрддрд╛рдИ рдЧрдИ рд╕рднреА рддреБрд▓рдирд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ clang / clang +++ gfortran рдХреЗ рд╕рд╛рде рд╣реИрдВ рдЬреЛ gcc / g +++ gfortran рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред

рд░реИрдкрд░ рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ x.__rmul__ FPU рдХрд╛ рдЭрдВрдбрд╛ рд╣реИ

check_fpu(x.__rmul__)(np.float32('1.5'))

рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ x.__rmul__(np.float32('1.5')) рдирд╣реАрдВ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ x.__rmul__ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ

x.__rmul__ рд╕рд╛рдЗрдерди рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИред

рдпрджрд┐ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЯреНрд░реЗрд╕рдмреИрдХ рдорд┐рд▓реЗрдЧрд╛ (рд╕рд╛рдЗрдереЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрд╕рдмреИрдХ рдмрдирд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ)ред

@jdemeyer IMHO рдХреА рдЦрд╕реНрддрд╛ рдЪреЗрддрд╛рд╡рдиреА рдХреЛрдб рдкрде рдореЗрдВ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рдЬрд╛рд░реА рдХреА рдЧрдИ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ FPU рдЭрдВрдбреЗ рдХреА рд╕реНрдкрд╖реНрдЯ рдЬрд╛рдВрдЪ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рди рдХрд┐ рдПрдХ рд░реБрдХрд╛рд╡рдЯ рд╕реЗрдЯред

numpy рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореБрдЦреНрдп iPython рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмреИрдХрдЯреНрд░реЗрд╕ рдХреЗред

@jdemeyer Cythignals рд╕реЗ sig_on() / sig_off() рдХреЗ рдмреАрдЪ Cython рдХреЛрдб рдПрдХ FPU рдзреНрд╡рдЬ рдЙрдард╛рдП рдЬрд╛рдиреЗ рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВрдЧреЗ ? рдпрд╛ рдпрд╣ рдзреНрд╡рдЬ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ?

cysignals рдлреЗрдВрдХ рджреЗрдВрдЧреЗ рдПрдХ рдЕрдкрд╡рд╛рдж SIGFPE рд╣реИ, рдЬреЛ рдХрд┐ FPU рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ FPU рдзреНрд╡рдЬ рдЙрдард╛рдП рдЬрд╛рдиреЗ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕реА рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдиреА: RuntimeWarning: invalid value encountered in greater рд╣реИ
np.float64(5)>e рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдБ e Sagemath рдирд┐рд░рдВрддрд░ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдШреБрдЧрдгрдХ 2.71828 рдХреЗ рдЖрдзрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ ..., рдФрд░ рдЗрд╕рд▓рд┐рдП True рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЗрд╕реЗ "рдкрд░рд┐рд╡рд░реНрддрд┐рдд" (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдИ) рдЬрд╛рдирддрд╛ рд╣реИ "рдЗрд╕рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдиреНрдирд┐рдХрдЯрди, рдпрд╣ e.n() ) рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИред
рдпрд╣ рдЕрдиреБрдорд╛рди RealField рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╣реИ (рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдирд┐рдХрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ)ред

рдлрд┐рд░, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: numpy np.float64(5)>e рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
рдпрд╛ рд╕рдордХрдХреНрд╖, рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА np.float64(5).__gt__(e) рд╕реЗ рдкреЙрдк рдЕрдк рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдмрд╕ рд╡рд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ type(e) sage.symbolic.constants_c.E ; рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ (рд▓рдЧрднрдЧ) рдбрдореА рдХреНрд▓рд╛рд╕ рд╣реИ
рд╕рд╛рдВрдкрдорда рдХреА рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдирд╛ ( SR )ред

np.float64(5).__gt__(e.n()) рдпрд╛ np.float64(5)>e.n() рд╕реЗ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдЖрдк e pi (рд╕реНрдкрд╖реНрдЯ pi.n()==3.1.415... рд╕рд╛рде) рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди (рд╕рдорд╛рди рдЪреЗрддрд╛рд╡рдиреА / рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдкреИрдЯрд░реНрди) рд╣реЛрддрд╛ рд╣реИред
pi рдХрд╛ рдкреНрд░рдХрд╛рд░ SR , рдЕрд░реНрдерд╛рдд sage.symbolic.expression.Expression ред

рдпрд╣рд╛рдБ рдЙрддреНрддрд░ рдПрдХ рд╣реА рд╣реИ - рд╕реБрдиреНрди рдПрдХ рд╡рд╕реНрддреБ рд▓реВрдк рдХреЗ рд╕рд╛рде np.greater рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░, рдЬреЛ e.__lt__(5.0) рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдпрд╣ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдлрдкреАрдпреВ рдЭрдВрдбреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдПрдорд┐рд╕ рд╣реИред

Ndarray рдЕрдВрдХрдЧрдгрд┐рдд / рддрд╛рд░реНрдХрд┐рдХ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ ( - рдФрд░ divmod рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) ufuncs рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВред рдЬрдм рдЛрд╖рд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрди ufuncs рдХреЗ рд▓рд┐рдП O (рдСрдмреНрдЬреЗрдХреНрдЯ) рд▓реВрдк рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реВрдк рдРрд░реЗ рдХреЗ рдКрдкрд░ рд▓реВрдк рдХрд░реЗрдВрдЧреЗ (рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 0d рд╣реИ), рддрддреНрд╡реЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, _рдмрд▓реНрдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░ FPU рдЭрдВрдбреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

рдЗрд╕рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЛрд╖рд┐ рдЗрди рдЭрдВрдбреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ, рд╢рд╛рдпрдж рдЗрд╕рдХреА рдирд╣реАрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдиреНрди рдХреЛ fpu рдЭрдВрдбреЗ рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред @njsmith , рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?

рддрдереНрдп рдХреА рдмрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ, e.__lt__(5.0) рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ:

sage: type(e.__lt__(np.float32(5.0)))
<type 'sage.symbolic.expression.Expression'>
sage: e.__lt__(np.float32(5.0))
e < 5.0
sage: bool(e.__lt__(np.float32(5.0)))  # this is how it's evaluated
True

рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдВрдд рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдХреЛ True ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдКрдкрд░ рд╕реЗ рдЖрдкрдХреЗ check_fpu рд░реИрдкрд░ рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

sage: check_fpu(e.__lt__)(np.float32(5.0))
e < 5.0

рдореИрдВ рдХрд┐рд╕реА рдЦрд╛рд╕ рд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ Sagemath рдореЗрдВ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдкрд┐рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ fpectl рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ (рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╣реАрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ, FreeBSD рдкрд░ рдЯреВрдЯ)ред рдПрдХ рдмрд╛рд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдерд╛ред

IMHO fpectl рдЗрддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╛ np.seterr() рдмрдЬрд╛рдп рд╕реБрдиреНрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдВрдкреЛрдиреЗрдВрдЯ рдШрдЯрдХреЛрдВ рдкрд░ рдмреЗрд╣рддрд░ рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

Fpectl рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ np.seterr рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИ:

np.seterr ufunc рд▓реВрдк рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЭрдВрдбреЗ рд╕реЗрдЯ рд╣реИрдВред

fpectl рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬрд╛рджреВ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрдм рднреА рдХреЛрдИ рдСрдкрд░реЗрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдЭрдВрдбреЗ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рддреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдПрдХ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдХрд░реНрдиреЗрд▓ рдЗрд╕реЗ рдПрдХ SIGFPE рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ SIGFPE рд╣реИрдВрдбрд▓рд░ рдХрд┐ longjmp s рд╕реАрдзреЗ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдмрд╛рд╣рд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВред

fpectl рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХреБрдЫ рдбрд╛рдЙрдирд╕рд╛рдЗрдб рд╣реИрдВ: (рдП) рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, (рдмреА) рдпрд╣ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдЭрдВрдбреЗ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ (рдпрд╣) рдХрд╛рдиреВрдиреА рд╣реИ рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓рд┐рдмрдо рдХреЗ рд▓реЛрдЧ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ), (c) longjmp рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдирд╛рдЬреБрдХ рд╣реИ; рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдк рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ segfault рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд ufuncs рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╕рдм рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕реБрдиреНрди рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдореБрджреНрджрд╛ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ - рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк seterr рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдореБрджреНрджрд╛ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ

рдХреНрдпрд╛ рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реВрдк рдХреЗ рд▓рд┐рдП FPU рдЭрдВрдбреЗ рдХреА рдЬрд╛рдБрдЪ рдХреЛ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╕рдордЭрджрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

@ eric-wieser: рдУрд╣, рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд╣рд╛рдБред рд╢рд╛рдпрдж рдпрд╣ рдЙрд╕ :-) рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ "рд╕рд╣реА рдмрд╛рдд" рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ - рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ dtype (рдерд┐рдВрдХ рдпреВрдЬрд╝рд░ dtypes) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реВрдк рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ рдХреБрдЫ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдХреВрд▓рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЬрд╛рдБрдЪ рд╣реЛ рд░рд╣реА рд╣реИ / FPU рдЭрдВрдбреЗ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдмреЗрд╣рдж рдзреАрдорд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдкреВрд░реНрдгрд╛рдВрдХ рд▓реВрдкреНрд╕ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ FPU рдЭрдВрдбреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдХрд░рддреЗ рд╣реИрдВ, ... рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрд╕рд╛рди рдХрдо рд╣реИ рдлрд▓ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ?

рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдЧрд▓рддрдлрд╣рдореА рд╣реБрдИ, рдФрд░ рдЛрд╖рд┐ рдиреЗ рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

@njsmith : рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдк рдпрд╣ рдХреНрдпреЛрдВ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред (рдпрд╣ рдкреВрд░реНрд╡ C99 рдпреБрдЧ рдореЗрдВ рд╕рд╣реА рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐)ред рдЬреИрд╕реЗ рд╣реА рдЖрдкрдХрд╛ C рдХрдВрдкрд╛рдЗрд▓рд░ C99- рд╕реНрдЯреИрдВрдбрд░реНрдб рдХрдВрдкреНрд▓реЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЖрдзреБрдирд┐рдХ FPU-рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдлрдВрдХреНрд╢рди (fenv) рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВред Fenv рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ setjmp / longjmp (рдлрд┐рд░ рд╕реЗ, рдорд╛рдирдХ рд╕реА рд╕реБрд╡рд┐рдзрд╛)ред

рдореИрдВ рдПрдХ рд▓рд┐рдмрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдлрдИ рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
(рдЬрдм рддрдХ рдЗрд╕реЗ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

@ рдбрд┐рдореНрдкреЗрд╕ : рдЖрдкрдХреЛ SIGFPE рд╕рдорд░реНрдерди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ C99 рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред (рдареАрдХ рд╣реИ, C99 рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдПрдХ SIGFPE рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рд╡рд╛рдЗрдб-рдмрд╛рдп-рдЬреАрд░реЛ рдХреЗ рд▓рд┐рдП рд╣реИ - рдпрд╣ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╣реБрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред) рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдФрд░ рд╡рд┐рдВрдбреЛрдЬред рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, MSVCRT рд╕рдВрд░рдЪрд┐рдд рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SIGFPE рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ fp рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдорд╛рдирдХ _control_fp рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Windows рд╕рдорд░реНрдерди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИред OTOH рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ longjmp рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ :-)

рдФрд░ рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдЕрдЧрд░ рдПрдХ рдПрдлрдПрдмреАрдПрдо рдиреЗ рдПрдХ рдПрдлрдИ рдЕрдкрд╡рд╛рдж рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдордВрдЬреВрд░реА рджреЗ рджреА, рддреЛ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рд╡реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╡реЗ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рд╡рд╣ рд╣реИ b / c рдХреЛрдИ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо X рдкрд░ рд╕реБрдиреНрдирддрд╛ рдЯреВрдЯ рдЧрдИ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред

рдХреНрдпрд╛ рдЖрдк рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдВрдд рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреВрдЫреЗ рдЧрдП рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

@njsmith : рдпрджрд┐ рдХрд┐рд╕реА libm (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб) рдХреЛ FE рдЕрдкрд╡рд╛рдж рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЕрдкрдирд╛ FE рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рд╕рд╣реЗрдЬ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред
рддреЛ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЛрдб рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП MS рд╕рдкреЛрд░реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╡реЗ Visual C (++) 2013 рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж fenv.h рд╢рд┐рдк рдХрд░рддреЗ рд╣реИрдВ ред
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реЗрдЯрдЬрдореНрдк / рд▓реЙрдиреНрдЧрдЬрдореНрдк рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ (рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реБрдб рдХреЗ рддрд╣рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдмрд╣реБрдд рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ)ред

рд╕реБрдиреНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

  • рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдПрдлрдкреА рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рддреЗрдЬ рдФрд░ рдвреАрд▓рд╛ рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдЕрдиреНрдпрдерд╛, рдЙрдиреНрд╣реЗрдВ рдорд╛рдирдХ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЬрд┐рд╕ рдЬрдЧрд╣ рд╕реЗ рд╡реЗ рдЖрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рддрд▓ рддрдХ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ; (рдмреЗрд╣рддрд░) fpectl рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛ рд╣реИред рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЬреИрд╕реЗ рдХрд┐ рдбрд┐рдмрдЧрд░реНрд╕ рдЖрдкрдХреЛ рд╣рд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ) рдХрдард┐рди, рдзреАрдорд╛ рдФрд░ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИ --- рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрдЧ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рдкрд░ рдкреЙрдк рдЕрдк рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдЗрдирд░реА рдкрд░ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рджреВрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд░рдирдЯрд╛рдЗрдордЯрд╛рдЗрдорд┐рдВрдЧ рдЪреАрдЬрд╝ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЛрд╖рд┐ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдЕрднреА рднреА рдлрд┐рдХреНрд╕рд┐рдВрдЧ (рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдордкреАрдПрдлрдЖрд░ рдореЗрдВ рдХреБрдЫ рдореБрджреНрджреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИ)ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдордВрдбрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ fenv / sigfpe рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рд╣реЛрдЧрд╛ред (рдореБрдЭреЗ рдЕрднреА рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдЕрдЧрд░ рдЛрд╖рд┐ рдмрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ)ред

рдпрджрд┐ рдХрд┐рд╕реА libm (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб) рдХреЛ FE рдЕрдкрд╡рд╛рдж рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЕрдкрдирд╛ FE рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рд╕рд╣реЗрдЬ рд░рд╣рд╛ рд╣реИ,

рдЖрдк рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдРрд╕рд╛ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЖрдЧ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЧреИрд░-рдорд╛рдирдХ рдореЛрдб рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП MS рд╕рдкреЛрд░реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╡реЗ Visual C (++) 2013 рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж fenv.h рд╢рд┐рдк рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ setjmp / longjmp рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ

рдореИрдВ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред Afaict, fenv.h рдореЗрдВ рдорд╛рдирдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдФрд░ MS рдорд╛рдирдХ рдкрд░ рдЪрд┐рдкрдХ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╣рд╛рдВ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрдЯрдЬрдореНрдк / рд▓реЙрдиреНрдЧрдЬрдореНрдк рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдПрдлрдкреА рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рддреЗрдЬ рдФрд░ рдвреАрд▓реЗ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЗрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдзреНрд╡рдЬ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдЙрдирдХреЗ рд╕рд╛рде рддреЗрдЬ рдФрд░ рдвреАрд▓реЗ рдЦреЗрд▓рдиреЗ рдХрд╛ рд╕рдЯреАрдХ рд╡рд┐рдкрд░реАрдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреЗрддрд╛рд╡рдиреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред

рдЬрд┐рд╕ рд╕реНрдерд╛рди рд╕реЗ рд╡реЗ рдЖрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рддрд▓ рддрдХ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЙрдирдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ; (рдмреЗрд╣рддрд░) fpectl рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛ рд╣реИред

рдЖрдк рд╡рд╕реНрддреБрддрдГ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдмрд╣рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SIGFPE рдХреА рдЬрд░реВрд░рдд рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╢рдХ рдХреА рддрд░рд╣ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВ, рдФрд░ рдЛрд╖рд┐ рдмрдЧ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдлрд┐рд░ рд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ fpectl рдХрд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛? рдпрд╣ рдХреЛрд░ рдбрдВрдк рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ cysignals fpectl рдХреЛрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЪрд▓рддрд╛ рднреА рдирд╣реАрдВ рд╣реИред)

рдпрджрд┐ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ SIGFPE рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ C рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдбреАрдмрдЧ рдмрд┐рд▓реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рддреБрдо рд╕рдм рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдкреНрд░рддреАрдХреЛрдВ рдкрдЯреНрдЯреА рдирд╣реАрдВ рд╣реИред рдФрд░ рд╣реЗ, рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдлрд┐рд░ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдмрджрд▓рдиреЗ рдпрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред (рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдЧ рдХреЛ рддреЗрдЬреА рд╕реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА - longjmp рдХрд╛ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рдЖрдкрдХреЛ рдЗрдЪреНрдЫрд┐рдд рд╕рдЯреАрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред)

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд▓реИрдВрдЧ рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдмрдЧ рдХреЛ рдЙрдмрд╛рд▓рддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, double рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдореЗрдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ

unsigned long a;
double b;
...
a = b;

FE_INVALID рдЙрдард╛рддрд╛ рд╣реИ (рдФрд░ рдХрднреА-рдХрднреА FE_INEXACT ); btw рдпрд╣ рдлреНрд▓реЛрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдорд╣рд╛рди рдПрдордкреАрдПрдлрдЖрд░ (рдПрдордкреАрдПрдлрдЖрд░ рдХреЛ рдпреБрдЧрд▓ рдХреЛ рдЕрдкрдиреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рдЯреАрдХ рдлрд╝реНрд▓реЛрдЯреНрд╕ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рд▓реЛрдЧреЛрдВ рдиреЗ рдЛрд╖рд┐ рдХреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред

рд╕рдВрдпреЛрдЧ рд╕реЗ, рдПрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдФрд░ рднреА рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ (2010 рдХреЗ рдмрд╛рдж рд╕реЗ, рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рдмрдВрдж рдбреБрдкреНрд▓рд┐рдХреЗрдЯ) рдмрдЬрдирд╛ рдмрдЧ 8100 рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдмрдЬрдирд╛ рдХреА рдХреЛрдИ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ fenv.h рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП fpectl рдареАрдХ рд╕реЗ рдкрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░ ред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреНрд▓реИрдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ C99- рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд░реНрдореАрд▓реА рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ numpy рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ; рд╢рд╛рдпрдж рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХрд┐ RuntimeWarning рдХреЗрд╡рд▓ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ("рдХреНрд▓реИрдВрдЧ рдмрдЧ 8100" рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдП, рдпрд╣ рдПрдХ рдХрд╛рдлреА рдкреНрд░рдореБрдЦ рдЙрджрд╛рд╣рд░рдг рд╣реИ) рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрдЧ 8100 рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ; C99 рдХреЗ рд▓рд┐рдП рдпрд╣ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдЙрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред numpy рд▓рдЧрддрд╛ рд╣реИ (рдЬреНрдпрд╛рджрд╛рддрд░) рд╡реИрд╕реЗ рднреА рдХрд╛рдо :-)

рдмрдЧ 8100 рдХреА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓реЗрдВрдЧ рдПрдлрдкреА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╡рдХреАрд▓ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред :-)

рдареАрдХ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрдЧ 17686 рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

qualiaa picture qualiaa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

inducer picture inducer  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amuresan picture amuresan  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manuels picture manuels  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MareinK picture MareinK  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ