W https://github.com/numpy/numpy/issues/6428 główną przyczyną błędu wydaje się być, że w simd.inc.src:543
, kompilator optymalizuje !(tmp == 0.)
do tmp != 0.
.Przypadki gdzie float == i! = Nie są bezpośrednimi przeciwieństwami
A comment mówi, że są to "nie całkiem to samo". Ale nie podaje żadnych szczegółów. NaNs są wymienione dalej, ale test pokazuje, że NaN porównuje się do 0.
w oczekiwany sposób.
Jakie są przypadki, w których ==
i !=
mogą zwracać wartość true/false?
Lub rozbieżność występuje w innym polu - np. zwracanie wartości, które mają tę samą wartość prawdy, ale są różne jako ints (ale testy pokazują, że nawet to nie wygląda) ?
Jeśli 'f' może być' NaN', to nie jest 'int'. –
Nan cant zostać 0. Ponieważ 0 jest liczbą, a NaN oznacza nie liczbą. więc twoje powiedzenie jeśli to zrobisz 'int a = 0;' a jest NaN? – amanuel2
Przepraszam, jeśli brakuje mi czegoś oczywistego, ale: gdzie w tym wątku identyfikują to jako główną przyczynę? Najbliższe odwołanie, które widzę zaczyna się od "Zgaduję"! W każdym razie ten połączony błąd wydaje się być bliżej: https://github.com/numpy/numpy/pull/6438 –