Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 15.03.2012
Сообщений: 23

Программа выводит значения в виде Nan при некоторых условиях в уравнении

13.09.2012, 18:19. Показов 4197. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите разобраться. Написал программу для решения уравнений вида x^n=a. Почему при вводе A отрицательного числа, а степени N положительного, нечетного, ответ выходит в виде Nan

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
 
class Uravnenie
{
    static void Main()
    {
        double a,n,k,x;
        Console.WriteLine("Введите A и N в уравнение вида x^n=a");
        Console.WriteLine("Введите A");
        a = double.Parse(Console.ReadLine());
        Console.WriteLine("Введите N");
        n = double.Parse(Console.ReadLine());
        k = 1 / n;
        x = Math.Pow(a,k);
 
        if ((n % 2 == 0) & (a >= 0) | (n % 2 != 0) & (a>=0 | a<0))
        {
            Console.WriteLine("Ответ: Х равен " + x);
            Console.ReadLine();
        }
        else 
            Console.WriteLine("Нет корней!!");
        
        
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2012, 18:19
Ответы с готовыми решениями:

Программа вместо значения выводит NaN
const N=100; var x,s,q,l,m:real; i,k:integer; function pow(o:real; p:real):real; begin pow:=exp(p*ln(o)); end; function...

Программа выводит nan ind
Исходные данные: a=4; b=5; eps=0.0001; Выводит: xz=-nan(ind); k=5; f(x)=-nan(ind);

Какие бы значения не вводил, в ответе выводит nan
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int factorial(int i) { if (i==0) return 1; else return...

8
 Аватар для Faba
90 / 88 / 17
Регистрация: 30.10.2009
Сообщений: 562
13.09.2012, 18:38
сам код не смотрел, но - а что при возведении в какую-либо степень может получится отрицательное число? ;-)
0
1 / 1 / 0
Регистрация: 15.03.2012
Сообщений: 23
13.09.2012, 18:44  [ТС]
ну например (-2)^3=-8
1
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
13.09.2012, 18:48
Mikle90, видимо комп считает, что: 0.(3)!=1/3
C#
1
2
3
4
5
6
7
8
9
            if ((n % 2 == 0) & (a >= 0) | (n % 2 != 0) & (a >= 0 | a < 0))
            {
                x = Math.Pow(Math.Abs(a), 1/k);
                x = (a < 0) ? -x : x;
                Console.WriteLine("Ответ: Х равен " + x);
                Console.ReadLine();
            }
            else
                Console.WriteLine("Нет корней!!");
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
13.09.2012, 19:02
C#
1
Console.WriteLine(Math.Pow(-2.0, 3.0));
Почему у меня -8?
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
13.09.2012, 19:20
упс, разумеется не 1/k , a 1/n
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
13.09.2012, 22:37
C#
1
(a>=0 | a<0)
Этим условием вы охватываете все числа, оно всегда выполняется, а следовательно проверка на него бесполезна. Достаточно
C#
1
if ((n % 2 == 0) && (a >= 0))
Ответ на ваш вопрос: отрицательное число в дробной степени не определено, например:
C#
1
Console.WriteLine(Math.Pow(-2.5, 3.3));
Результатом будет NaN
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.09.2012, 00:18
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
 
 
namespace Power
{
    internal class Program
    {
        private static double Power(double x, double n)
        {
            if (Math.Abs(n - 0) < double.Epsilon)
                return 1;
            if (Math.Abs(n - 1) < double.Epsilon)
                return x;
            if (Math.Abs(x - 0) < double.Epsilon)
                return 0;
            if (Math.Abs(x - 1) < double.Epsilon)
                return 1;
            if (x > 0)
                return Math.Pow(x, n);
            int k = (int) n;
            double result = 1;
            if (k>0)
                for (int i = 0; i < k; i++)
                    result *= x;
            else
                for (int i = k; i < 0; i++)
                    result /= x;
            var add = Math.Exp((n - k) * Math.Log(-x, Math.E));
            return Math.Abs(add - 1) < double.Epsilon ? result : -result * add;
        }
 
 
        private static void Main()
        {
            for (double i = -2; i < 3; i += 0.5)
                for (double j = -2; j < 2; j += 0.5)
                    Console.WriteLine("{0}^{1} = {2}", i, j, Power(i, j));
            Console.ReadKey();
        }
    }
}
Добавлено через 12 минут
Как-то так

Добавлено через 13 минут
Хотя так вроде покороче (но почему-то консоль начинает глючить )
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
 
 
namespace Power
{
    static class MyMath
    {
        public static double Power(double x, double n)
        {
            if (Math.Abs(n - 0) < double.Epsilon)
                return 1;
            if (Math.Abs(n - 1) < double.Epsilon)
                return x;
            if (Math.Abs(x - 0) < double.Epsilon)
                return 0;
            if (Math.Abs(x - 1) < double.Epsilon)
                return 1;
            if (x > 0)
                return Math.Pow(x, n);
            return Math.Round(-Math.Exp(n * Math.Log(-x, Math.E)), 15);
        }
    }
    internal class Program
    {
        private static void Main()
        {
            for (double i = -2; i < 3; i += 0.5)
                for (double j = -2; j < 2; j += 0.5)
                    Console.WriteLine("{0}^{1} = {2}", i.ToString(), j.ToString(), MyMath.Power(i, j).ToString());
            Console.WriteLine(MyMath.Power(-8, 1.0 / 3));
            Console.ReadKey();
        }
    }
}
А не, не глючит, просто не успевает прорисоваться. Если медленно консоль прокручивать, то все нормально

Добавлено через 11 минут
Хотя судя по всему это бред и для x<0 и y != Z, не определена операция возведения Хотя можно извратиться через какие-нибудь гамма функции, через нее даже факториал ПИ можно посчитать...

Добавлено через 20 минут
Сначала покажем, как вычисляется экспонента e^z, где e — число Эйлера, z — произвольное комплексное число, z=x+yi.
Теперь рассмотрим общий случай a^b, где a,b оба являются комплексными числами. Проще всего это сделать, представив a в экспоненциальной форме и используя тождество, где Ln — комплексный логарифм:

Следует иметь в виду, что комплексный логарифм — многозначная функция, так что, вообще говоря, комплексная степень определена неоднозначно.
.....
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.09.2012, 20:46
Цитата Сообщение от Psilon Посмотреть сообщение
Следует иметь в виду, что комплексный логарифм — многозначная функция, так что, вообще говоря, комплексная степень определена неоднозначно.
Вот поэтому-то и не стоит пытаться реализовать такую возможность. На что надеяться пользователю, если результат работы программы неоднозначен? Это пригодится, разве-что, для научных расчётов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2012, 20:46
Помогаю со студенческими работами здесь

NaN выводит программа решения квадратных уравнений
using System; class KvadrYravn { static void Main() { Console.WriteLine(&quot;Введите коэффициенты a, b, c с новой...

Программа требует заменить комплексные значения и значения NaN на вещественные числа
Помогите построить график. Программа требует заменить комплексные значения и значения NaN на вещественные числа, но я не имею...

DataGridView - окраска определенных ячеек в определенный цвет при некоторых условиях
Всем добрый день. Имеется вопрос: Есть программа которая по строчно читает текстовый файл Код: using System; using...

Не работает программа на C выдаёт странные значения -nan(ind)
Суть программы в том чтобы в некоторые отрезки времени указывать высоту на которую подброшен объект вверх, при указанной скорости в начале...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru