2014-02-07 3 views
0

Я пытаюсь получить простой результат на консольном приложении в C#Получение выхода NaN в C#

Console.Write("Enter a number: "); 
double x = Convert.ToDouble(Console.ReadLine()); 
x=(7*x/4+1/2) - (5*x/4+1/2)*Math.Acos(Math.PI*x); 
Console.WriteLine(x); 

Это приводит к NaN, и я не могу понять, почему. Я не очень хорошо разбираюсь в программировании, поэтому я уверен, что это нечто очевидное. Благодаря!


EDIT: Он должен был быть Math.Cos, а не Math.Acos. Теперь я столкнулся с чем-то другим, когда я ввожу слово x = 3, он возвращает результат 9; однако it should result in 10. Любая причина в том, почему?

+0

Вы можете взять arccos числа от -1 до 1, я считаю. Поэтому вы должны убедиться, что '(Math.PI * x)' будет приводить к числу от -1 до 1. –

+0

Если у вас есть второй вопрос *, просьба начать новый вопрос *. Один вопрос на вопрос! –

+1

Кроме того, вы обнаружите, что ваша программа легче отлаживать, если вы не уничтожаете свои данные во время своей работы. Скажем, 'double result = (7 ... Console.WriteLine (result);' вместо того, чтобы уничтожить значение 'x'. Переменные дешевые, сделайте их много. –

ответ

1

Вы используете Math.Acos, который может принимать только входные сигналы от -1 до +1. Когда вы помещаете Pi, он возвращает NaN, который затем разбивает всю формулу. Вы, наверное, хотели просто Math.Cos

EDIT

Получив неверный ответ, вероятно, это целочисленное деление на 1/2. При делении целых чисел, ответ усекается, так 1/2 результаты в 0, не ожидал 0.5, таким образом, давая вам ответ от на 1. Попробуйте с 1.0/2.0

+0

Это было именно это. – Bonnaduck

+0

@Bonnaduck see мое редактирование при получении неправильного ответа – CDspace

+0

А, отлично! Это происходит только на 1/2, 2/4 и т. д.? – Bonnaduck

3

Начните с разделения. как только вы получите NaN, вся математика после этого - NaN!

Вы должны проверить NaN с помощью isNaN, потому что x == NaN является всегда ложно!

+0

Определенно должно быть Cos, а не Acos. Но теперь я получаю неправильные значения (см. Править). Все, что вы заметили? – Bonnaduck

0

ArcCos пи = «угол, косинус которого равен пи». Косинусы только в диапазоне от -1 до +1.

1

Как хорошая практика, вы также должны проверить, что введенный пользователем текст фактически является числом. Вы можете использовать double.TryParse, который возвращает false, если текст не может быть проанализирован как число. Ваш текущий код будет генерировать исключение вместо

Смежные вопросы