На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Степени нуля
    В интернете много споров о том, каков должен быть результат вычисления 00 (ноль в нулевой степени).
    Одни говорят, что 1, другие, что результат неопределён (NaN).
    Может быть, сейчас математики уже пришли к какому-то единому мнению?

    Ну и заодно интересует вопрос возведения нуля в отрицательную степень: каков будет результат в этом случае?
    Сообщение отредактировано: Jin X -
      Самые правильные должны говорить, что "результат неопределён". :yes:

      Добавлено
      П.С. ну и ноль в отрицательной - тоже неопределён, но если вы допускаете оперирование с бесконечностью, то можно считать, что равно бесконечности (без знака(!), т.е. знак - неопределён).

      Добавлено
      П.П.С. А вообще, помнится, был холивар на близкую тему с Килей, так там результаты были весьма плачевны; ну что-то около того. :blush:
        Цитата Славян @
        там результаты были весьма плачевны
        Это как? :)
          Вообще, в математике это неопределённость.
          Если взять две функции 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 @
          Это как?
          Киля упёрся рогом в своё понимание математики, и сдвинуть его с его ошибочной точки зрения никакими доводами не получилось.
            Цитата amk @
            Не вижу никакой логики. Вижу предположение сделанное на основе лишь поверхностного сходства формул.
            Я тут прогнал немного, удалил уже :)

            Добавлено
            Цитата amk @
            Поэтому при написании библиотек для языков программирования приняли, что 00 = 1. В этом случае в большинстве алгоритмов не приходится делать соответствующую проверку.
            Может, всё-таки правильнее возвращать NaN?
            Хотя, можно задавать опцию, которая будет определять поведение :)
            А что насчёт 0 в отрицательной степени? Или тут тоже всё неоднозначно? Или однозначно? :)

            Добавлено
            Цитата amk @
            Поэтому при написании библиотек для языков программирования приняли, что 00 = 1.
            А результат нуля в отрицательной степени каким приняли возвращать?
              По поводу опции можно сделать, скажем, так.
              При X = 0, если опция PowerZeroNaN = True, то:
              • для Y = 0 результат = NaN
              • для Y < 0 результат = ∞
              А если PowerZeroNaN = False, то:
              • для Y = 0 результат будет = 1
              • для Y < 0 результат = ...???ноль???...
                Вот если сделаете так, как хотите (прогнозируете), то потом этот кусок войдёт в такую-то библиотеку, она - в бо́льшую, та - ещё выше, и (в итоге) народу когда-нибудь выдастся: 2=3. Дотошные пойдут шерстить код, дабы найти коварный изъян, а другие философски скажут "да, мир противоречив" и бардак будет. :yes-sad:
                  Славян, я хочу выяснить как лучше (правильнее), только и всего. Так и хочу сделать...
                  Меня волнуют 00 и 0-1.

                  p.s. По поводу того, что многие возвращают 00=1 я думаю, что смысл тут ещё и в том, что точность хранения вещественного числа конечна и 0 может быть по факту не нулём, а просто очень малым числом, скажем, 10-10000, результат возведения в нулевую степень которого должен дать 0.
                    Лучше (и правильнее!) всего - сигнализировать, что "получается особый случай!", а не пытаться его объехать с той или иной долей правды и неправды.
                      Можно сделать так: возвращать результат и флаг корректности.
                      Если мы возводим отрицательное число в нецелую степень, возвращается NaN и флаг НЕкорректности.
                      Если мы возводим 0 в степень 0, возвращается 1 и флаг НЕкорректности.
                      Если мы возводим 0 в степень < 0, возвращается Inf (или -Inf, если основание = -0) и флаг НЕкорректности.
                      Таким образом, кому нужны значения, могут игнорировать флаг корректности (и даже обрабатывать Inf, а совсем косячные случаи проверять на NaN).
                        Древнейший холивар - вот вам дровишек :)
                          С возвращаемым "флагом корректности" - вполне нормуль! (намёк - хлам в ответе или не хлам :whistle: ).
                            Цитата Славян @
                            намёк - хлам в ответе или не хлам
                            Ну да. Если хлам, то там может быть либо 1, либо Inf, либо NaN :)
                              Проще сделать не флаг, который придётся проверять, а две функции с разным поведением в этой ситуации.
                              Цитата Jin X @
                              для Y < 0 результат = ∞

                              Цитата Jin X @
                              для Y < 0 результат = ...???ноль???...
                              Говорю же: не вижу логики, а лишь догадки. Поскольку тут однозначно должна быть +∞ (в случае X=+0) и NaN в случае X=-0, никакой неопределённости в этом случае нет.
                              Случай Y=-0, кстати, тоже должен рассматриваться как Y<0.
                                Цитата amk @
                                Случай Y=-0, кстати, тоже должен рассматриваться как Y<0.
                                Речь идёт только про X=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 в случае X=-0, никакой неопределённости в этом случае нет.
                                Почему NaN? Может, если степень целая, то тоже Inf (и -Inf при нечётной степени)?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0462 ]   [ 16 queries used ]   [ Generated: 28.03.24, 18:24 GMT ]