Инженерный калькулятор

Выражение целиком: скобки, степени, тригонометрия, логарифмы, факториал. Рядом видно тот же ввод в градусах и в радианах, история держит последние восемь вычислений, а вместо слова «Ошибка» калькулятор называет причину: пустое поле, деление на ноль, выход из области определения, переполнение.

Выражение

Введите число или выражение: цифры, + − * / ^, скобки, факториал !, процент %, константы π и e. Функции: sin, cos, tan, asin, acos, atan, log, ln, sqrt, abs, exp. Знаки × и ÷ тоже принимаются. На клавиатуре есть не все функции: abs и exp набираются текстом, как abs(-7).

Неявное умножение разрешено: 2π, 3(1+2), 2sin(30). Пустое поле считается ошибкой, а не нулём.

Enter считает и записывает результат в историю, Esc очищает поле. Клавиатура работает только внутри полей этого калькулятора.

Результат

sin(30)+cos(60)
1

Углы в градусах

Тот же ввод в градусах
—
Тот же ввод в радианах
—
Разность режимов
—

История

    Пока пусто: нажмите Enter, чтобы сохранить расчёт.

    Опыт: где кончается точность

    Синус угла, кратного 180°, должен быть равен нулю. Посмотрите, что остаётся в числе двойной точности при разных n.

    Остаток синуса на углах 180·n°
    Уголsin в градусах|sin|, остатокК 2^-52

    —

    Что считает инженерный калькулятор

    Калькулятор принимает выражение целиком, как его записывают на бумаге: со скобками, степенями, функциями и факториалом. Результат пересчитывается при каждом изменении строки. Рядом видно то же выражение, посчитанное в градусах и в радианах, и по этой паре чисел проще всего заметить, что выбран не тот режим углов.

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

    Как заполнить поле

    Пишите выражение в поле ввода или набирайте кнопками. Кнопки вставляют текст в позицию курсора, поэтому порядок набора не важен.

    Числа записываются обычные и десятичные: 2, 0.5, 2e3 (это 2000). Операции: +, -, *, /, ^ для степени. Знаки −, ×, ÷ из вставленного текста тоже понимаются. Функции: sin, cos, tan, asin, acos, atan, log (десятичный), ln (натуральный), sqrt, abs, exp. Константы: π или pi, а также e. Постфиксы: ! для факториала и % для процента, так что 5! равно 120, а 50% равно 0,5.

    Знак умножения можно не ставить: 2π, 3(1+2) и 2sin(30) читаются как умножение. Степень связывает справа налево, поэтому 2^3^2 это 29 = 512, а не 82. Унарный минус слабее степени: -2^2 даёт −4, а (-2)^2 даёт 4.

    Факториал и процент прилипают к ближайшему значению: 200*10% считается как 200 · 0,1 = 20, а не как 200 · 10 с последующим процентом от результата.

    Градусы и радианы

    Режим углов влияет только на тригонометрию. sin(30) в градусах даёт 0,5, а в радианах −0,988031624093: 30 радиан это почти пять полных оборотов, угол совсем другой. Обратные функции работают в ту же сторону: asin(0.5) в градусах равен 30, в радианах 0,523598775598.

    Тангенс в точках, где косинус равен нулю, не существует. Калькулятор не выдаёт там огромное число, а пишет: «Тангенс не определён: угол кратен 90°». Проверка идёт по косинусу с порогом 10−12, поэтому tan(90) и tan(270) в градусах дают объяснение, а tan(89.99) считается нормально.

    Как получается результат

    Введённая строка разбирается на токены, затем рекурсивным спуском собирается дерево выражения, и только после этого дерево вычисляется. Введённый текст нигде не исполняется как код: калькулятор понимает ровно ту грамматику, которая описана выше, и ничего сверх неё.

    Контрольный пример: sin(30)+cos(60) в градусах, ровно то, что видно на экране при открытии страницы.

    1. 30° переводятся в радианы: 30 · π / 180 = 0,5235987755982988.
    2. Синус этого угла в двоичной арифметике равен 0,49999999999999994, чуть меньше половины.
    3. 60° дают 1,0471975511965976 радиан, косинус равен 0,5000000000000001, чуть больше половины.
    4. Сумма двух слагаемых равна ровно 1, и на экране появляется 1.

    На шагах 2 и 3 каждое слагаемое отличается от 0,5 в последнем разряде, но ошибки противоположны по знаку и сокращаются. Совпадение с единицей получилось из этих конкретных значений, а не из общего правила.

    Почему sin(180°) не равен нулю

    Перевод 180° в радианы даёт 3,141592653589793, ближайшее к π число двойной точности, а не само π. Синус этого числа равен 1,22464679915·10−16, и калькулятор показывает его, а не ноль. Формат хранит 53 значащих бита, и его предельная относительная точность 2−52 ≈ 2,22·10−16.

    Опыт внизу страницы показывает, как остаток растёт с номером полуоборота: для sin(180°), sin(360°) и sin(540°) он равен 1,22·10−16, 2,45·10−16 и 3,67·10−16. Ошибка накапливается линейно вместе с углом.

    Где модель останавливается

    • Только вещественные числа. sqrt(-4) даёт сообщение об ошибке, а не 2i: комплексных чисел в модели нет.
    • Факториал до 170!. Значение 170! ≈ 7,25741561531·10306 помещается в двойную точность, 171! уже нет, и калькулятор говорит об этом прямо.
    • Никакой символьной алгебры. Выражения не упрощаются, переменных нет: x в поле это ошибка, а не неизвестное.
    • Двенадцать значащих цифр на экране. Промежуточные вычисления идут в полной точности, но разницу меньше 10−12 на дисплее не увидеть. Где важен каждый последний разряд, нужен отдельный расчёт с оценкой погрешности.

    Источники

    • IEEE 754-2019, Standard for Floating-Point Arithmetic: формат binary64, 53-битная мантисса, машинное эпсилон 2−52.
    • Goldberg D. What Every Computer Scientist Should Know About Floating-Point Arithmetic // ACM Computing Surveys, 1991, 23(1): 5–48.
    • Дейкстра Э. Recursive Programming // Numerische Mathematik, 1960: разбор выражений без исполнения текста как программы.
    • Значения 170! и 171! сверены прямым вычислением, определение тангенса и область его существования взяты из стандартного курса анализа.