Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Математика


Автор: SP5B 10.11.2014, 01:06
Я тут прохожу курс "начало Java" здесь на сайте и в разделе ооп столкнулся с одним примером, когда начал смотреть код тщательней ... вообщем к вопросу 
Код

 double x ;
      double y;
     
      double course = 90;
      x =   Math.cos(course / 180 * Math.PI);
      y =   Math.cos(90 / 180 * Math.PI);
      System.out.println(x);
      System.out.println(y);

Результат 
6.123233995736766E-17
1.0
Почему так ? Когда делаю int course =90; работает все правильно. 

Автор: jManiak 10.11.2014, 01:47
Цитата

1. Если операция выполняется над двумя целочисленными операндами и один из них имеет тип long, результат будет иметь тип long. 
2. Если операция выполняется над двумя целочисленными операндами и НИ один из них НЕ имеет типа long, результат будет иметь тип int.
3. Если операция выполняется над целочисленным операндом и вещественным операндом, то результат будет иметь соответствующий вещественный тип.
4. Если операция выполняется над операндом типа double  и операндом типа float, то результат будет иметь тип double.



Автор: SP5B 10.11.2014, 02:24
Да это понятно... 
а вот почему тут 6 :
Код

x =   Math.cos(course / 180 * Math.PI);

не понятно.

Автор: sQu1rr 10.11.2014, 20:32
Цитата(SP5B @  10.11.2014,  02:24 Найти цитируемый пост)
а вот почему тут 6 :

Не 6 а 6 в степени -17 что ~= 0, изучайте детали IEEE 754 или подобные (в java если не ошибаюсь какойто свой стандарт, но это сути не меняет)

Автор: Mirkes 11.11.2014, 14:39
Кстати, замечу, что правильным является первый из приведенных вами ответов, поскольку 6e-17 это почти ноль. А вот когда вы используете целочисленный курс и во втором вычислении результат не правильный поскольку косинус 90 равен нулю!

Автор: Michael.de 11.11.2014, 16:53
Mirkes, только что проверил в консоли:
Код

6.123233995736766E-17
1.0

эээ... но как такое возможно?
А ответ такой: 90 / 180 = 0, т.к. оба числа int. При перемножении 0 (int) и Math.PI (double) получится .0 (теперь уже double).

Автор: SP5B 11.11.2014, 17:45
sQu1rr, Спасибо, все верно подметил .. это ближе к 0;

Michael.de, Огромное спасибо за разъяснение. Теперь все понятно .

Как я понял результаты cos ,sin и т.д  выводятся в радианах поэтому  .../ 180 * Math.PI

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)