Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.185.180] |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
В интернете много споров о том, каков должен быть результат вычисления 00 (ноль в нулевой степени).
Одни говорят, что 1, другие, что результат неопределён (NaN). Может быть, сейчас математики уже пришли к какому-то единому мнению? Ну и заодно интересует вопрос возведения нуля в отрицательную степень: каков будет результат в этом случае? |
Сообщ.
#2
,
|
|
|
Самые правильные должны говорить, что "результат неопределён".
Добавлено П.С. ну и ноль в отрицательной - тоже неопределён, но если вы допускаете оперирование с бесконечностью, то можно считать, что равно бесконечности (без знака(!), т.е. знак - неопределён). Добавлено П.П.С. А вообще, помнится, был холивар на близкую тему с Килей, так там результаты были весьма плачевны; ну что-то около того. |
Сообщ.
#3
,
|
|
|
Цитата Славян @ Это как? там результаты были весьма плачевны |
Сообщ.
#4
,
|
|
|
Вообще, в математике это неопределённость.
Если взять две функции g(x) и f(x), такие, что стремятся к нулю при x, стремящемся к 0, то в зависимости от их выбора выражение f(x)g(x) может стремиться к любому значению, от нуля до бесконечности. На практике часто встречается случай, когда обе функции в районе нуля имеют ненулевую производную, то есть ведут себя линейно, в таком случае мы имеем функцию xx, которая стремится к 1. То же верно при выборе любых степеней x. Поэтому при написании библиотек для языков программирования приняли, что 00 = 1. В этом случае в большинстве алгоритмов не приходится делать соответствующую проверку. Хотя в некоторых языках принято, что 00 = 0. Цитата Jin X @ Не вижу никакой логики. Вижу предположение сделанное на основе лишь поверхностного сходства формул.p.s. По мне логика должна быть таковой: если 00=1, то и 0X<0=1, а если 00=NaN, тогда 0X<0=-∞. Попробуй перейти к пределам, тогда поймёшь в чём твоя ошибка. Добавлено Почему пост поменялся без подписи? Цитата Jin X @ Киля упёрся рогом в своё понимание математики, и сдвинуть его с его ошибочной точки зрения никакими доводами не получилось. Это как? |
Сообщ.
#5
,
|
|
|
Цитата amk @ Я тут прогнал немного, удалил уже Не вижу никакой логики. Вижу предположение сделанное на основе лишь поверхностного сходства формул. Добавлено Цитата amk @ Может, всё-таки правильнее возвращать NaN?Поэтому при написании библиотек для языков программирования приняли, что 00 = 1. В этом случае в большинстве алгоритмов не приходится делать соответствующую проверку. Хотя, можно задавать опцию, которая будет определять поведение А что насчёт 0 в отрицательной степени? Или тут тоже всё неоднозначно? Или однозначно? Добавлено Цитата amk @ А результат нуля в отрицательной степени каким приняли возвращать? Поэтому при написании библиотек для языков программирования приняли, что 00 = 1. |
Сообщ.
#6
,
|
|
|
По поводу опции можно сделать, скажем, так.
При X = 0, если опция PowerZeroNaN = True, то: • для Y = 0 результат = NaN • для Y < 0 результат = ∞ А если PowerZeroNaN = False, то: • для Y = 0 результат будет = 1 • для Y < 0 результат = ...???ноль???... |
Сообщ.
#7
,
|
|
|
Вот если сделаете так, как хотите (прогнозируете), то потом этот кусок войдёт в такую-то библиотеку, она - в бо́льшую, та - ещё выше, и (в итоге) народу когда-нибудь выдастся: 2=3. Дотошные пойдут шерстить код, дабы найти коварный изъян, а другие философски скажут "да, мир противоречив" и бардак будет.
|
Сообщ.
#8
,
|
|
|
Славян, я хочу выяснить как лучше (правильнее), только и всего. Так и хочу сделать...
Меня волнуют 00 и 0-1. p.s. По поводу того, что многие возвращают 00=1 я думаю, что смысл тут ещё и в том, что точность хранения вещественного числа конечна и 0 может быть по факту не нулём, а просто очень малым числом, скажем, 10-10000, результат возведения в нулевую степень которого должен дать 0. |
Сообщ.
#9
,
|
|
|
Лучше (и правильнее!) всего - сигнализировать, что "получается особый случай!", а не пытаться его объехать с той или иной долей правды и неправды.
|
Сообщ.
#10
,
|
|
|
Можно сделать так: возвращать результат и флаг корректности.
Если мы возводим отрицательное число в нецелую степень, возвращается NaN и флаг НЕкорректности. Если мы возводим 0 в степень 0, возвращается 1 и флаг НЕкорректности. Если мы возводим 0 в степень < 0, возвращается Inf (или -Inf, если основание = -0) и флаг НЕкорректности. Таким образом, кому нужны значения, могут игнорировать флаг корректности (и даже обрабатывать Inf, а совсем косячные случаи проверять на NaN). |
Сообщ.
#11
,
|
|
|
Древнейший холивар - вот вам дровишек
|
Сообщ.
#12
,
|
|
|
С возвращаемым "флагом корректности" - вполне нормуль! (намёк - хлам в ответе или не хлам ).
|
Сообщ.
#13
,
|
|
|
Цитата Славян @ Ну да. Если хлам, то там может быть либо 1, либо Inf, либо NaN намёк - хлам в ответе или не хлам |
Сообщ.
#14
,
|
|
|
Проще сделать не флаг, который придётся проверять, а две функции с разным поведением в этой ситуации.
Цитата Jin X @ для Y < 0 результат = ∞ Цитата Jin X @ Говорю же: не вижу логики, а лишь догадки. Поскольку тут однозначно должна быть +∞ (в случае X=+0) и NaN в случае X=-0, никакой неопределённости в этом случае нет.для Y < 0 результат = ...???ноль???... Случай Y=-0, кстати, тоже должен рассматриваться как Y<0. |
Сообщ.
#15
,
|
|
|
Цитата amk @ Речь идёт только про X=0 ?Случай Y=-0, кстати, тоже должен рассматриваться как Y<0. Правильно ли я пишу: Результат операции 00 не определён, однако многие программные библиотеки возвращают 1. Почему? Видимо, это связано во-первых, с возможной погрешностью вычислений, в результате которых 0 может быть по факту совсем не нулём, а очень малым числом (скажем, 10-10000, но мы получим ноль, поскольку разрядность мантиссы и показателя степени при хранении чисел с плавающей запятой конечны и обычно не очень велики), соответственно, нулевая степень такого числа должна быть равна 1. Во-вторых, это может быть связано с интегральными исчислениями, когда имеются функции f(x) и g(x), стремящиеся к нулю при x->0, но имеющие ненулевые производные, поэтому и результат вычисления f(x)g(x) должен быть определён (и обычно он стремится к 1). Добавлено Цитата amk @ Можно сделать с флагом и 2 обёртки: которая ругается на 00 и которая хавает.Проще сделать не флаг, который придётся проверять, а две функции с разным поведением в этой ситуации. Более того, можно сделать не флаг, а код корректности: 0 – корректный результат 1 – 0 в степени 0, результат = 1 (по правилам математики должен быть не определён, однако основание X = 0, переданное функции может являться результатом округления близкого к 0 числа (например, 10^-10000), тогда результатом возведения такого числа в степень 0 должна быть 1, поэтому оставим эту неоднозначную ситуацию на усмотрение программиста) 2 – 0 в отрицательной степени, результат = бесконечности (Inf) 3 – слишком большой по модулю результат (бесконечность, +/-Inf) 4 – попытка возвести отрицательное число в нецелую степень, либо X или Y = NaN, результат - нечисло (QNaN) Добавлено Цитата amk @ Почему NaN? Может, если степень целая, то тоже Inf (и -Inf при нечётной степени)? NaN в случае X=-0, никакой неопределённости в этом случае нет. |