Как язык [x] обрабатывает неопределенные формы, такие как 0^0?
https://softwareengineering.stackexchange.com/questions/9788
-
16-10-2019 - |
Вопрос
По мере того, как X переходит к 0, пределы x^0 и 0^x перейдут до 1 и 0 соответственно. Некоторые говорят, что лучшее значение для 0^0 зависит от контекста, другие говорят, что значение 0^0 должно быть 1. Мне интересно знать, что говорят ваши языковые реализователи. Кажется, нет консенсуса. Например, в Activestate Perl 5.12.0:
C:\>perl -e "print 0**0" 1
В то время как в Mathematica 6.0:
In[1]:= 0^0 During evaluation of In[1]:= Power::indet: Indeterminate expression 0^0 encountered. >> Out[1]= Indeterminate
Мне также интересно узнать ваше мнение по этому вопросу: что должно быть 0^0? А также, независимо от того, вводили ли вы ошибку в программу, которую вы писали (или было трудно отлаживать программу) из -за того, как ваш язык обрабатывает неопределенные формы?
Решение
Согласно с это Статья в Википедии,
"Большинство языка программирования с функцией мощности реализованы с использованием функции IEEE POW и, следовательно, оценивают 0^0 как 1. Стандарты более позднего C и C ++ описывают это как нормативное поведение. Стандарт Java требует этого поведения. .Math.pow также относится к 0^0 как 1. "
Другие советы
Python:
>>> for t in [int, float, complex, fractions.Fraction, decimal.Decimal]:
... print(t, t(0)**0)
...
<type 'int'> 1
<type 'float'> 1.0
<type 'complex'> (1+0j)
<class 'fractions.Fraction'> 1
Traceback (most recent call last):
...
decimal.InvalidOperation: 0 ** 0
Google говорит:
0^0 = 1
Delphi получил 2 значения поплавок: NaN
а также Infinity
. Анкет Это возвращается в случае странности.
Но у него нет встроенной функции экспоненты.
^
для указателей, как в «Эй, ты там, я указываю на тебя!»