- PVSM.RU - https://www.pvsm.ru -

Почему x^0 = 1 наглядно

Традиционное определение для операции возведения в натуральную степень (или целую положительную) вводится примерно следующим образом:

Возведе́ние в сте́пень [1] — арифметическая операция, первоначально определяемая как результат многократного умножения числа на себя.

На первый взгляд, это определение затруднительно обобщить для целых показателей степени меньших единицы

    ...
x^3  = x*x*x
x^2  = x*x
x^1  = x
x^0  = ?????
x^-1 = ?????
    ...

Но если вспомнить, что у операции умножения есть обратная - деление, то напрашивается расширение и для отрицательных показателей степени

    ...
x^3  = x*x*x
x^-3 = 1/(x*x*x) = 1/x/x/x
    ...

следовательно

    ...
x^3  = x*x*x
x^2  = x*x
x^1  = x
x^0  = ?
x^-1 = 1/x
x^-2 = 1/x/x
x^-3 = 1/x/x/x
    ...

Но всё ещё открытым остаётся вопрос для 0: с одной стороны, на место ? напрашивается 1, но с другой, такое определение остаётся не вполне симметричным для положительных и отрицательных значений...

Поэтому при внимательном рассмотрении возникает вполне естественно желание слегка видоизменить и усовершенствовать исходное

    ...
x^3  = 1*x*x*x
x^2  = 1*x*x
x^1  = 1*x
x^0  = 1
x^-1 = 1/x
x^-2 = 1/x/x
x^-3 = 1/x/x/x
    ...

В таком представлении определение словно обретает стройность вкупе с полнотой:

Возведение числа X в целочисленную степень N — арифметическая операция, определяемая как результат многократного [N по модулю раз] умножения либо деления единицы на число X.

Ход мыслей

Ход мыслей

Чуть более общий случай* [2] на языке программирования C#

static double Pow(double x, int pow, double seed = 1d)
{
    var value = seed;
    
    if (pow < 0)
        for (var i = 0; i > pow; i--) value /= x;
    else
        for (var i = 0; i < pow; i++) value *= x;
    
    return value;
}

* в общем случае зерно [seed] может быть отличным от 1

В таком виде определение легко и естественно расширяется на случай 0^0, о котором издавна ведутся жаркие споры в математическом сообществе.

Из него закономерно следует, что 0^0 = 1.

Действительно, если мы ни разу не будем умножать единицу на ноль, то в результате останется исходная 1, но если хоть раз умножим, то уже получим 0.


Если хорошенько вдуматься, то строго доказать тождество X^0 = 1 невозможно, а причина в том, что мы ведь сами даём определения функциям таким образом, чтобы они обладали удобными в прикладных расчётах свойствами.

То есть при попытке доказать тождество X^0 = 1 различными методами, на самом деле мы лишь демонстрируем, что функция возведения в степень нами же определена именно таким способом, чтобы обладать теми заданными полезными свойствами, через которые и проводится само "доказательство". То есть возникает неявный замкнутый круг.

На вопрос:

  • Почему X^0 = 1?

Честный ответ таков:

  • X^0 = 1 по определению!

Тут уместно спросить:

  • Но почему же выбрано именно такое определение?

На что приемлем ответ:

  • Потому что оно во многом стройное (смотреть иллюстрации выше) и обладает рядом замечательных свойств, очень уместных в практических вычислениях.

Если, скажем, определить X^0 иначе, то частично сломается свойство умножения степеней с одинаковыми основаниями X^M * X^N = X^(M+N) (а именноX^0 * X^N = X^N), что будет лишь усложнять вычисления без какой-либо смысловой ценности.


Аналогичным образом легко рассмотреть функцию целочисленного умножения через сложение и вычитание с нулевым зерном

    ...
x*3  = 0 + x + x + x
x*2  = 0 + x + x
x*1  = 0 + x
x*0  = 0
x*-1 = 0 - x
x*-2 = 0 - x - x
x*-3 = 0 - x - x - x
    ...
static double Mul(double x, int scale, double seed = 0d)
{
    var value = seed;
    
    if (pow < 0)
        for (var i = 0; i > scale; i--) value -= x;
    else
        for (var i = 0; i < scale; i++) value += x;
    
    return value;
}

Умножение произвольного числа X на целое число N — арифметическая операция, определяемая как результат многократного [N по модулю раз] сложения либо вычитания нуля с числом X.

Из определения органично вытекает тождество X*0 = 0.

В самом деле, если к нулю ничего не прибавлять и ничего из нуля не вычитать, то 0 в итоге и останется!

Похожим способом можно взглянуть на функции сложения и вычитания через функции инкремента и декремента, но в качестве зерна будет выступать уже само число.

Сложение

    ...
x +  3  = x + 1 + 1 + 1
x +  2  = x + 1 + 1
x +  1  = x + 1
x +  0  = x
x +(-1) = x - 1
x +(-2) = x - 1 - 1
x +(-3) = x - 1 - 1 - 1
    ...
static double Add(double x, int shift)
{
    var value = x;
    
    if (pow < 0)
        for (var i = 0; i > shift; i--) value -= 1;
    else
        for (var i = 0; i < shift; i++) value += 1;
    
    return value;
}

Вычитание

    ...
x -  3  = x - 1 - 1 - 1
x -  2  = x - 1 - 1
x -  1  = x - 1
x -  0  = x
x -(-1) = x + 1
x -(-2) = x + 1 + 1
x -(-3) = x + 1 + 1 + 1
    ...
static double Sub(double x, int shift)
{
    var value = x;
    
    if (pow < 0)
        for (var i = 0; i > shift; i--) value += 1;
    else
        for (var i = 0; i < shift; i++) value -= 1;
    
    return value;
}

И для полноты следует вспомнить функцию факториала и доопределить её для 0. С отрицательными аргументами становится сложнее, поскольку из общей формулы возникают бесконечные произведения, для которых традиционные методы вычислений уже во многом не определены.

n!  = 1 * [(n - 0)*(n - 1)*(n - 2)*...*3*2*1]
    ...
3!  = 1 * (3*2*1)
2!  = 1 * (2*1)
1!  = 1 * (1)
0!  = 1
    ...

Благодарю за прочтение!

Надеюсь, что рассмотренные примеры помогут читателю подружиться с тождеством X^0 = 1.


Зеркала статьи:

EN: gitlab [3], habr [4]

RU: gitlab [5], habr [6]

Автор:
Makeman

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/matematika/388587

Ссылки в тексте:

[1] Возведе́ние в сте́пень: https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C

[2] Чуть более общий случай*: https://sharplab.io/#v2:C4LgTgrgdgNAJiA1AHwAICYCMBYAUH1TATgAoAiQgAgEkBbABwBsBTW5qYAQ2AEsB7KGQCUAbjx4AZnzCUSAN04yelALyUADCMrKAPJQDMWnokRC8AbzyVrlQqVFWbdkgBIy5ngF8AeiQC06EKqlOYAstwAFgB0AAp8AO4kPDCUAUKewmK4NrbEru5evn6YQWphkbEJSSnF6ZmO1s5uHj4k6qUh4cDRcYnJGnUO2U55zYUkJcHl3ZV9KSUZQzlNBa2BU109Vf2Bi1me4rjOQwR5ZADCEADOwHy0NAwsbBzc/IInuFIy8orawZp/PSGbQmMy4SzDRp5JYjUhjVppKa9aqpXb1SG5OGrIqTMrI/q1PYNTH5Fq+dpI7YpdpEjErMkTDrmfHzQZZZajbEkdZ4qmUNFDA74I6YABslDgfAgACMWJRkZKZXKAB4pHgcSj0BIpRWy5iUK7MZhwYKYOBgiE5BQyBSMCD6tSG43smzEngSWRa+KUPTtYk5L6ya1/NQA5QAPk1CSMfj8QVt9soAHo1MqXdZmIxDf6bIGfkp/kYfVH4kZQZQE/qAFSp9OUYmoADsFc4duY+yAA=

[3] gitlab: https://gitlab.com/Makeloft-Studio/Rainbow/-/wikis/WHY-X%5E0-=-1-VISUALLY

[4] habr: https://habr.com/ru/articles/778212/

[5] gitlab: https://gitlab.com/Makeloft-Studio/Rainbow/-/wikis/%D0%9F%D0%9E%D0%A7%D0%95%D0%9C%D0%A3-X%5E0-=-1-%D0%9D%D0%90%D0%93%D0%9B%D0%AF%D0%94%D0%9D%D0%9E

[6] habr: https://habr.com/ru/articles/778198/

[7] Источник: https://habr.com/ru/articles/778198/?utm_source=habrahabr&utm_medium=rss&utm_campaign=778198