Есть ли способ определить, какой из двух языков рассчитывается более точно?

Ситуация: Я выполняю одинаковые вычисления на двух разных языках (C ++ & Scilab). Результаты немного различаются при использовании трансцендентных функций, таких как sin () и exp (). Я предполагаю, что это небольшое различие связано со следующим:

Стандарт IEEE не требует, чтобы трансцендентные функции были точно округлены из-за дилеммы производителя стола.

Источник: Что каждый ученый должен знать об арифметике с плавающей точкой.

Вопрос: Есть ли способ для меня, чтобы определить, какой (если любой) из этих языков является более точным в моих конкретных расчетах, без самостоятельно выполнять расчеты?

Я думал о том, чтобы просто поместить расчеты в Wolfram Alpha и посмотреть, какое из этих двух значений точно дольше. К сожалению, я жду этот вопрос (о точности Wolfram Alpha), чтобы ответить.

Примечание: после публикации этого вопроса я все еще собираюсь попробовать упомянутый выше способ Wolfram, но есть ли какой-то более простой и эффективный способ определить, какой из двух языков выдает более точные результаты?

-1

Решение

Технически говоря, существует предварительное обсуждение этого вопроса: точность отличается от точности. Точность — это измерение того, насколько близко ваш расчет к истинному значению, каким бы он ни был; Точность — это измерение того, насколько близко много вычислений друг к другу. Вы понимаете лучше, если вы думаете с точки зрения распределения вероятностей набора результатов расчета. Следовательно, вы можете иметь низкую точность, например, с высокой точностью. Название вашего поста о точности, но в тексте вы упоминаете точность.
Я думаю, ты имел в виду точность.

Тем не менее, нет общего ответа.
Есть много методов, которые вы можете использовать, на самом деле бесконечные алгоритмы могут соответствовать вашим потребностям.
Тебе нужно:

  • библиотека как GMP, как уже предлагалось
  • бумага и карандаш, чтобы оценить точность вашего алгоритма

Почему это? Вы должны оценить свои sin(x) с большей точностью, чем два результата, которые вы хотите сравнить. А алгоритмы для трансцендентных функций являются последовательными. Таким образом, вы должны оценить, как ошибка алгоритма, а в некоторых случаях и ошибки представления, влияют на ваши вычисления. На этом этапе реализуйте метод по вашему выбору и оцените расстояние между вашим результатом и двумя другими, убедившись, что общая ошибка, влияющая на ваш результат, тем не менее, меньше некоторой контролируемой константы.

В качестве примера, оценивая exp(10) может быть сделано с использованием обычного экспоненциального разложения Тейлора около нуля и с использованием многих терминов; но если вы используете тот же метод для exp(-10), вы можете потерпеть неудачу, так как его расширение имеет чередующиеся знаковые условия. Это означает, что у вас могут быть эффекты отмены, которые могут накапливаться. Вы не хотите этого, иначе вы можете быть точными, но предвзятыми, неточными в ваших расчетах.
Обычно используется GMP, потому что он предназначен для этого.

Так, например, вы можете обнаружить, что Scilab является лучшим в расчете exp(-10)и C ++ в exp(10)только потому, что они могли использовать разные реализации.

В итоге: используйте GMP и ищите точный алгоритм. Это может работать или быть единственным решением, если вам нужен точный результат некоторого конкретного суммирования Фурье или ряда, в которых, например, должны оцениваться другие трансцендентные термины.
Но если вам просто нужен этот ответ для простого sin а также expнадо искать таблицы, и все тут.

3

Другие решения

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

Существуют различные методы для реализации функций, таких как sin, Некоторые используют таблицу значений (например, платформы небольших встроенных систем) для аппаратных расчетов.

Реализация трансцендентных математических функций обычно зависит от языкового разработчика.

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

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

1

По вопросам рекламы [email protected]