Другие посты верны относительно практического вопроса работы с реализациями с плавающей запятой, которые возвращают результаты с небольшими ошибками.Однако было бы неплохо, если бы реализации библиотек с плавающей точкой сохранили базовую идентичность известных функций:
Math.Sin(Math.PI)
должен равен 0
,
Math.Cos(Math.PI)
должен равен -1
,
Math.Sin(Math.PI/2)
должен равен 1
,
Math.Cos(Math.PI/2)
должен равен 0
и т. Д.
Можно ожидать, что библиотека с плавающей запятой будет учитывать эти и другие тригонометрические идентификаторы , независимо от незначительных ошибок в своих постоянных значениях (например, Math.PI).
Тот факт, что вы получаете небольшую ошибку от Math.Cos(Math.PI/2)
, указывает на то, что реализация вычисляет результат, а не извлекает его из таблицы.Лучшая реализация Math.Cos
и других трансцендентных функций может быть более точной для конкретных личностей.
Я уверен, что в случае C # такое поведение ожидается, и поэтому Microsoft не может изменить его безвлияет на существующий код.Если получение точного результата для конкретных тригонометрических идентификаторов имеет для вас значение, вы можете обернуть встроенные функции с плавающей запятой в некоторый код, который проверяет известные входные данные.