В математике , Пифагорово сложение является бинарным действием над действительными числами , которое вычисляет длину гипотенузы прямоугольного треугольника , если даны его две стороны. Согласно теореме Пифагора , для треугольника со сторонами и , эта длина может быть вычислена как , где обозначает Пифагорово сложение. [1]
Эта операция может использоваться при преобразовании декартовых координат в полярные координаты . Она также обеспечивает простую нотацию и терминологию для некоторых формул, когда ее слагаемые сложны; например, соотношение энергии и импульса в физике становится Она реализована во многих библиотеках программирования как функция hypot , таким образом, чтобы избежать ошибок, возникающих из-за вычислений с ограниченной точностью, выполняемых на компьютерах. В своих приложениях к обработке сигналов и распространению неопределенности измерений та же операция также называется сложением в квадратуре ; [2] она связана со средним квадратичным или «средним квадратом».
Пифагоровое сложение (и его реализация в виде функции hypot) часто используется вместе с функцией atan2 для преобразования декартовых координат в полярные координаты : [3] [4]
Повторное сложение Пифагора может найти диаметр прямоугольного кубоида . Это наибольшее расстояние между двумя точками, длина диагонали тела кубоида. Для кубоида с длинами сторон , , и эта длина равна .
Если измерения имеют независимые ошибки , то квадратурный метод дает общую ошибку, тогда как верхний предел общей ошибки равен тому, если ошибки не были независимыми. [5]
В обработке сигналов сложение в квадратуре используется для нахождения общего шума от независимых источников шума. Например, если датчик изображения выдает шесть цифровых чисел дробового шума , три — шума темнового тока и два — шума Джонсона–Найквиста при определенных условиях, то общий шум представляет собой цифровые числа, [6] показывающие доминирование более крупных источников шума.
Среднеквадратичное значение конечного набора чисел равно их пифагорейской сумме. Это обобщенное среднее значение чисел.
Операция ассоциативна и коммутативна , [7] и Это означает , что действительные числа образуют коммутативную полугруппу .
Действительные числа ниже не являются группой , потому что никогда не могут произвести отрицательное число в качестве своего результата, тогда как каждый элемент группы должен быть результатом применения групповой операции к себе и единичному элементу . Для неотрицательных чисел это все еще не группа, потому что пифагорейское сложение одного числа со вторым положительным числом может только увеличить первое число, поэтому ни одно положительное число не может иметь обратный элемент . Вместо этого он образует коммутативный моноид для неотрицательных чисел с нулем в качестве его единицы.
Hypot — это математическая функция, определенная для вычисления длины гипотенузы прямоугольного треугольника. Она была разработана, чтобы избежать ошибок, возникающих из-за вычислений с ограниченной точностью, выполняемых на компьютерах. Вычисление длины гипотенузы треугольника возможно с помощью функции квадратного корня из суммы двух квадратов , но hypot позволяет избежать проблем, которые возникают при возведении в квадрат очень больших или очень маленьких чисел. Если вычислять с помощью натуральной формулы, квадраты очень больших или малых значений и могут выходить за пределы диапазона точности машины при вычислении на компьютере, что приводит к неточному результату, вызванному арифметическим переполнением и недогрузкой . Функция hypot была разработана для вычисления результата без возникновения этой проблемы. [8]
Если любой из входов в hypot бесконечен, результат тоже бесконечен. Поскольку это верно для всех возможных значений другого входа, стандарт IEEE 754 с плавающей точкой требует, чтобы это оставалось верным даже тогда, когда другой вход не является числом (NaN). [9]
Начиная с C++17 , появилась дополнительная функция hypot для 3D-вычислений: [10]
Трудность наивной реализации заключается в том, что может произойти переполнение или недополнение, если только промежуточный результат не вычисляется с повышенной точностью . Распространенный метод реализации заключается в том, чтобы при необходимости поменять значения так, чтобы , а затем использовать эквивалентную форму
Вычисление не может выйти за пределы, если и не равны нулю. Если происходит потеря значимости, конечный результат равен , что верно в пределах точности вычисления. Квадратный корень вычисляется из значения от 1 до 2. Наконец, умножение на не может выйти за пределы значимости и выходит за пределы, только когда результат слишком велик для представления. [8] Эта реализация имеет недостаток, заключающийся в том, что она требует дополнительного деления с плавающей точкой, что может удвоить стоимость наивной реализации, поскольку умножение и сложение обычно намного быстрее, чем деление и квадратный корень. Обычно реализация медленнее в 2,5–3 раза. [11]
Более сложные реализации позволяют избежать этого, разделяя входные данные на большее количество случаев:
Однако эта реализация чрезвычайно медленная, когда она приводит к неверным прогнозам прыжков из-за разных случаев. Дополнительные методы позволяют вычислять результат более точно, например, менее чем до одного ulp . [8]
Функция сложения Пифагора присутствует как функция hypot во многих языках программирования и библиотеках, включая CSS , [12] C++11 , [13] D , [14] Fortran (начиная с Fortran 2008), [15] Go , [16] JavaScript (начиная с ES2015), [17] Julia , [18] Java (начиная с версии 1.5), [19] Kotlin , [20] MATLAB , [21] PHP , [22] Python , [23] Ruby , [24] Rust , [25] и Scala . [26]
В Metafont имеются встроенные операции сложения и вычитания Пифагора под названиями ++
и +-+
соответственно.