Непонятный результат при преобразовании степени в радиан в C - PullRequest
0 голосов
/ 22 мая 2019
  int x;
  scanf("%d",&x);
  x=(double)((x*3.14)/180);
  printf("%.6lf",x);

Когда я запускаю приведенный выше код и вводю x = 60, я получаю -0,000000.

  int x;
  double a;
  scanf("%d",&x);
  a=(x*3.14)/180;
  printf("%.6lf",a);

Но когда я запускаю приведенный выше код, я получаю правильный ответ.

Я хочу знать, где я делаю неправильно. Есть ли проблема в моем типе литья или использовании двойного или любой другой вещи? Любая помощь будет оценена. Спасибо!

N.B. : Мне нужно напечатать вывод до 6 цифр после десятичной дроби.

1 Ответ

5 голосов
/ 22 мая 2019

В вашем коде есть две проблемы:

x = (double)((x*3.14)/180);

(x*3.14)/180 уже является double, поэтому эта строка эквивалентна:

x = (x*3.14)/180;

, но в любом случае тип x остается int, поэтому, если x было, например, 300, новые значения x будут 300 * 3.14/180 = 5.2333, которые будут обрезаны до 5.

Вторая проблема здесь:

printf("%.6lf",x);

Как объяснено ранее, тип x равен int, но спецификатор формата "%.6lf" требует double. Если типы переменных не соответствуют спецификатору формата, поведение не определено.

Вторая версия вашего кода совершенно верна, но помните, что пользователь может вводить только целые значения.

Кстати: 3.14 - очень плохое приближение PI, я уверен, что вы можете сделать лучше.

...