Вселенную... нельзя понять, не научившись сначала понимать её язык, и не изучив буквы, которыми она написана. А написана она на математическом языке, и её буквы — это треугольники, дуги и другие геометрические фигуры...
Галилео Галилей, «Пробирщик» (1623)
... чего нет, того нельзя считать.
Екклеcиаст
Еще на втором курсе университета нам дали решить не сложную задачу: написать программу которая по длинам трех произвольно заданных отрезков определит, можно ли ими нарисовать треугольник.
Я тогда подошёл к решению как типичный программист: зная, что треугольник можно нарисовать только если сумма длин двух любых сторон больше длины третьей стороны, обозначил эти длины как вещественные переменные a, b, c; описал 3 необходимых вычисления и 3 проверки: если a+b>c или b+c>a или c+a>b, то треугольник можно нарисовать. Запрашиваем переменные, делаем 3 вычисления и 3 проверки, выдаём результат. Готово.
Программу я принес на очередное занятие, перед которым поделился решением с человеком, который почему-то решал эту же задачу, но обучаясь уже на третьем курсе. А он в свою очередь, поделился своим решением, которое меня одновременно изумило и восхитило: вместо 3 вычислений и 3 проверок он делал только 2 вычисления и 1 проверку, а затем выдавал результат.
Как же он это сделал? Используя формулу Герона!
Формула Герона позволяет получить площадь S произвольного треугольника через длины сторон a, b, c и полупериметр p равный, по определению, p=(a+b+c)/2. Кто не знал или забыл, выглядит она так:
S=√(p(p-a)(p-b)(p-c))
Если значение подкоренного выражения p(p-a)(p-b)(p-c) больше нуля, то площадь треугольника можно вычислить. Естественно, площадь можно вычислить только у треугольника, который существует, а, значит, его можно нарисовать.
Итак, достаточно запросить переменные, сделать 2 вычисления - сначала полупериметра, а затем подкоренного выражения, проверить значение последнего на положительность и выдать результат. Великолепно!
Конечно, внимательный читатель может раскритиковать мои рассуждения: процесс вычисления одного лишь полупериметра алгоритмически сложнее, чем вычисление 3 сумм. В контексте изначальной задачи такая критика справедлива.
Однако, если добавить в изначальное условие задачи пожелание вычислять площадь треугольника (а, как правило, заказчики уточняют пожелания во время разработки программного обеспечения), то использование формулы Герона станет необходимостью. И в такой формулировке задачи (функционально уточнённо-расширенной) алгоритмическая сложность становится больше, а математические преимущества свойств формулы Герона начинают привлекательно блистать.
Именно тогда я ясно осознал эту истину: математика намного сильнее программирования. Да и это вполне логично, ведь программирование — это всего лишь одна из прекрасных областей из огромной и великолепной математики.