Это кажется невозможным.
Значение piBy180 * градуса вычисляется почти корректно, менее чем на 2 единицы в 17-й значащей цифре. Процессор должен выполнить умножение, чтобы сделать это, и он сделал это с двойной точностью, правильно, даже если кто-то попытался испортить точность, используя вызовы DirectX.
Значение Val неверно уже на 8-й значащей цифре. Val объявляется как double, и ему присваивается двойное значение, которое было вычислено микросекунду назад, без дальнейших вычислений.
Это сборка релиза? Интересно, мог ли C # не хранить последнее значение в Val, как это делает C ++. Что происходит в отладочной сборке?