Есть ли причина, по которой я получаю неправильное значение при использовании тригонометрических методов в Java?

Я просто экспериментировал с методами в своем классе Java и следовал именно тому, что есть в книге в качестве примера. Однако, когда я беру косинус пи / 2, я получаю значение 6,123233995736766E-17, что явно неверно (ответ должен быть 0). Почему я получаю это значение? Что-то не так с моим кодом?

import java.util.*;

public class JavaPractice {
  public static void main(String[] args) {
    double num = Math.cos(Math.PI / 2);
    System.out.print(num);
  }
}

person Ryan Foster    schedule 03.01.2019    source источник


Ответы (1)


Точное значение PI не может быть сохранено (поскольку оно иррационально и продолжается вечно), поэтому Java использует приближение. Таким образом, PI/2 также не является точным, поэтому вы берете косинус значения, которое почти PI/2. Вы заметите, что ответ, который вы получите, очень близок к 0. С вашим кодом все в порядке.

person sadiela    schedule 04.01.2019
comment
Чтобы продолжить этот ответ. Представьте себе delta = Pi - Math.PiPi истинным значением). На самом деле вы вычисляете cos((Pi - delta)/2) = sin(delta/2) ~ delta/2 - person kvantour; 04.01.2019