Co powrócić na numer: print (-2 ** 2)
? Według moich obliczeń powinno to być 4
, ale interpreter zwraca -4
.
Czy to pytanie Pythona, czy moja matematyka jest okropna?Błąd obliczeń z operatorem pow.
Odpowiedz
Zgodnie z docs, **
ma wyższy priorytet niż -
, zatem Twój kod jest równoważny -(2 ** 2)
. Aby uzyskać pożądany wynik można umieścić -2
w nawiasach
>>> (-2) ** 2
4
lub użyć wbudowanej pow
function
>>> pow(-2, 2)
4
lub math.pow
funkcji (powrót float
wartości)
>>> import math
>>> math.pow(-2, 2)
4.0
Operacja **
jest zrobione przed minusem. Aby uzyskać oczekiwane wyniki, należy zrobić
print ((-2) ** 2)
Zatem w unparenthesized sekwencji mocy i operatorów jednoargumentowych operatorzy są oceniane od strony prawej do lewej (to nie ogranicza kolejność oceny dla operandów):
-1**2
wyniki w-1
.
Pełny dokument detail of operators precedence jest również dostępny w dokumentacji. Można zobaczyć ostatni wiersz jest (expr)
które zmuszają expr zostać ocenione przed użyciem, stąd wynik (-2) ** 2 = 4
można również użyć biblioteki matematycznej ...
math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2
Python ma problem i robi nie widzę -2 jako liczby. Wydaje się, że jest to zgodne z projektem, o czym jest mowa w dokumentach.
-2 interpretuje się jako - (2) {jednoargumentowy minus dodatniej liczby 2}
które zwykle nie daje problem ale -a ** 2 ** ma wyższy priorytet co - a więc z - interpretowane jako uneralne operatoe zamiast części numeru -2 ** 2 oznacza -2 zamiast 2.
- 1. OpenCL - przyrostowe sumowanie podczas obliczeń
- 2. kompozycja z dyndycznym operatorem?
- 3. GCC C++ pow dokładność
- 4. Wybierz skrzynkę z operatorem "Jest"
- 5. Kolejność wywołań RxJava2 z wykonalnym operatorem i operatorem
- 6. Niejednoznaczne pow() funkcja
- 7. Podsumowanie obliczeń współczynnika z dplyr
- 8. Czas obliczeń! =
- 9. Różnica między operatorem globalnym a operatorem członkowskim
- 10. wiązanie dwukierunkowe z elvis-operatorem
- 11. Zgodność z operatorem JavaScript IN
- 12. Zła wydajność z operatorem OR
- 13. pow dla wartości całkowych
- 14. Funkcja GLSL pow?
- 15. Pow i VMware Fusion
- 16. Korzystanie pow() funkcja rzuca niezdefiniowany błąd odniesienia w C
- 17. pow (power) realizacja szablon z wiki
- 18. Konfiguracja kątowa z operatorem w teście Jasmine
- 19. Korzystanie z operatorem diament w Javie 7
- 20. C: Sprawa przełącznik z operatorem logicznym
- 21. niepodpisany przelew z operatorem modulus w C
- 22. Wymiana wyjątkowo powolnej funkcji pow()
- 23. Wymuszanie wykonywania obliczeń zmiennoprzecinkowych
- 24. constexpr versus template, pow function
- 25. Running Pow & MAMP Pro Jednocześnie
- 26. Liczba obliczeń SQL (*)
- 27. unsigned long long int pow
- 28. Zatrzymywanie obliczeń strumienia java na podstawie wcześniejszych wyników obliczeń
- 29. Wyraźnie zrozumienie obliczeń macierzy
- 30. Optymalizacja obliczeń "funkcji różnicowej"
Powinieneś zrobić (-2) ** 2 zamiast – sshashank124
'-' ma niższy priorytet niż' ** '. Jest to interpretowane jako - (2 ** 2), nie (-2) ** 2 ... – l4mpi
Głównym powodem tego zamieszania dla większości ludzi jest to, że spodziewają się, że "-2" będzie dosłownym znaczeniem "minus 2", a nie wyrażenie oznaczające "zastosuj operator negacji do literalnego 2 w czasie wykonywania". Kiedy zrozumiesz, że to operator, oczywiste jest, że jest to kwestia priorytetowa; dopóki to nie zrobisz, to jest kłopotliwe. (Dlatego wszystkie osoby, które się na to natkną, są zdezorientowane przez "-2 ** 2", a nie "-x ** 2".) – abarnert