C ++ не совсем точно представляет числа с плавающей запятой из-за безумного объема памяти, который потребовался бы для получения необходимой бесконечной точности. Для демонстрации этого попробуйте следующее:
double ninth = 1.0/9.0;
double result = 9.0 * ninth;
Это должно привести к значению в результате .99999999999
Итак, по сути, вам нужно сравнить значения с плавающей запятой в небольшом эпсилоне (я склонен использовать 1e-7). Вы можете выполнить строгое побитовое сравнение, но оно состоит из преобразования памяти, используемой с плавающей запятой, в массив символов длины sizeof (float), а затем сравнения символов.
Еще одна вещь, которую нужно проверить, это то, используете ли вы градусы или нет. Компьютерный калькулятор использует градусы для вычисления косинуса (обратите внимание, что результат калькулятора равен 0,9999 ..., что очень близко к 1. Косинус нуля равен 1), тогда как функция косинуса, предложенная в в радианах. Попробуйте умножить ваше значение на PI / 180.0 и посмотрите, соответствует ли результат вашим ожиданиям.