Как отследить, чтобы логарифм из отрицательного числа не вычислялся
Нужно написать программу решающую следующий пример:
Мой код печатает NaN - Not a Number. Я понимаю что дело в том, что Log не может быть отрицательным. Но тогда каким образом решить задачу?
static void Main(string[] args)
{
Console.WriteLine("Hello");
double x = double.Parse(Console.ReadLine());
double y = Math.Log(4 - Math.Pow(x, 2));
Console.WriteLine(y);
}
}
Ответы (2 шт):
Изменённый вариант
Console.WriteLine("Hello");
double x = double.Parse(Console.ReadLine());
if (x > -2 && x < 2)
{
double y = Math.Log(4 - Math.Pow(x, 2));
Console.WriteLine(y);
}
else
{
Console.WriteLine("X не входит в промежуток");
}
Если программа выдает ошибку, что логарифм не может быть меньше нуля, это значит, что вы пытаетесь найти логарифм меньше нуля. В данном случае это возможно при x > 2 или x < -2
4 - x^2 < 0
-x^2 < -4 |*(-1)
x^2 > 4
x > 2 или x < -2
Значит нужно проверять: если модель x больше 2, то выводим сообщение о неправильном вводе, иначе считаем логарифм. Проверка - это ветвление, условный оператор if. Можно прочитать
- Здесь https://metanit.com/sharp/tutorial/2.5.php
- Здесь https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/if-else
Код, таким образом, будет следующий:
static void Main(string[] args)
{
Console.WriteLine("Hello");
// Ввод x
double x = double.Parse(Console.ReadLine());
// Если x соответствует условиям, т.е. |x| <= 2
if (Math.Abs(x) < 2) {
double y = Math.Log(4 - Math.Pow(x, 2));
Console.WriteLine(y);
}
else
Console.WriteLine("Ошибка ввода. При введенных значениях требуется вычисление логарифма отрицательного числа");
}
}
Сообщение может быть какое захотите. Можете выбрасывать исключение, показывать картинку - это уже другая тема.
