63962


`np.float32` でマイナスのフロートを2乗をすると正しい値を出力しません、なぜでしょうか？  
Pythonでのfloat型では正しい値を出力します。

`a[0]` は`-1159.4025` です。

[![画像の説明をここに入力](https://i.stack.imgur.com/A57He.jpg)](https://i.stack.imgur.com/A57He.jpg)

[![画像の説明をここに入力](https://i.stack.imgur.com/kti2v.jpg)](https://i.stack.imgur.com/kti2v.jpg)


CC BY-SA 4.0
2020-03-18T08:45:25.023
63959
2020-04-16T00:33:38.380
2020-04-16T00:33:38.380
19110
38272
question
python numpy
numpyのフロート型でn乗の結果が正しい値にならない


`**` は`-` より演算子の優先順位が高いので `-100 ** 0.5` は `- (100 ** 0.5)` と解釈されています。  
`(-100) ** 0.5` は 複素数 `0 + 10j` になり、`np.float32`では複素数を扱わず`nan`になります。

[code]

    >>> -100 ** 0.5
    -10.0
    >>> (-100) ** 0.5
    (6.123233995736766e-16+10j)
    
    >>> np.float(-100.0) ** 0.5
    (6.123233995736766e-16+10j)
    >>> np.float_(-100.0) ** 0.5
    nan
    >>> np.float32(-100.0) ** 0.5
    nan
    >>> np.complex64(-100.0) ** 0.5
    (6.123233995736767e-16+10.000000000000002j)
    
[/code]


CC BY-SA 4.0
2020-03-18T10:44:39.597
63962
2020-03-18T10:44:39.597
241
63959
answer


**【回答】**  
Numpyのfloatも正しく動作しています。float32がいけないようです。

[code]

    np.float(-1159.4025)**0.5
    (2.084961175548369e-15+34.05j)
    
    np.float32(-1159.4025)**0.5
    __main__:1: RuntimeWarning: invalid value encountered in power
    
[/code]


CC BY-SA 4.0
2020-03-18T11:37:45.973
63964
2020-03-18T12:03:05.897
2020-03-18T12:03:05.897
35558
35558
63959
answer