Как я могу заставить функцию php cos вернуть правильное значение?

я пробовал

$x = cos(deg2rad($angle)); 

но он возвращает 6.12323399574E-17, когда угол составляет 90 градусов вместо 0. Я читал, что это проблема с плавающей точкой, но есть ли обходной путь?

6.1E-17 почти равно нулю [*]. Если вам нужно фактически сравнить результат с нолем, в математике с плавающей запятой вы должны проверить, что он находится в пределах определенного допуска желаемого значения, так как большинство чисел невозможно представить правильно.

 $x = cos(deg2rad($angle)); $is_zero = (abs($x) < 1e-10); 

Строго говоря, конечно, нуль на самом деле является числом, которое может быть правильно отображено в плавающей точке. Реальная проблема заключается в том, что pi / 2.0 не может быть, поэтому вход в вашу функцию cos не является «правильным».

[*] Чтобы сделать это в контексте, взятом в пропорции 1 AU (среднее расстояние от Солнца до Земли), это эквивалентно 0,0092 миллиметрам , или примерно на десятую от средней ширины человеческого волоса …

6.12323399574E-17 – чрезвычайно маленькое число с плавающей запятой (17 нулей после десятичной точки, за которым следует 6), почти неотличимое от 0. Если вы имеете дело с плавающими точками (как и любая функция косинуса), вы не можете избежать проблем как это. Если вам нужно сравнить число с плавающей точкой до нуля, вы должны сделать это с ошибками (т. Е. Это число в пределах определенного диапазона значений около нуля), а не абсолютное сравнение, даже с более простыми функциями, чем косинус. Если вам просто нужно сделать некоторую математику с результатом (добавьте ее, умножьте ее, что угодно), она будет вести себя почти точно так же, как ноль, поэтому вам не придется беспокоиться.

Попробуй это

 $x = round(cos(deg2rad($angle)), 3);