С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
TECHNO
 Аватар для Василий-Робот
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366

Поиск точек графика функции на заданном интервале

28.12.2010, 14:26. Показов 3275. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Смысл программы: поиск точек графика функции y=(x^0.33)-(x+1)^0.33 на интервале.
Вопрос: почему начиная с наименьшего значения отрезка значений икс (сказанул) до нуля программа выдает результат типа: -1.IND0000000000. После нуля значения идут вразумительные значения
Я использовал float, но когда использовал double была также фигня
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <conio.h>
#include <stdio.h>
#include <math.h>
int main()
{
    int i;
    float x=-1.95;
    float y;
    for(i=0;i<50;i++)
    {
                     x+=0.05;
                     float y=pow(x,0.33)-pow((x+1),0.33);
                     printf("x = %5.4f\ny = %20.14f\n",x,y);
    }
    x=1;
    y=pow(x,(1/3))-pow((x+1),(1/3));
    printf("x = %5.4f\ny = %15.14f\n",x,y);
    getch();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.12.2010, 14:26
Ответы с готовыми решениями:

Табулирование функции на заданном интервале
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; main(int argc, char * argv) { double h,x,t,ep,eps,fun,Pi; int n; ...

Табулирование функции на заданном интервале
Добрый день мне нужна помощь! Кому не трудно пожалуйста помогите! Нужно протабулировать функцию y=F(x) на промежутке с шагом...

Расчитать значение функции на заданном интервале
Задание: Рассчитать значение функции на заданном интервале в n точках. Границы интервала задаются переменными xmax и xmin, a и b...

21
 Аватар для deadlock
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
28.12.2010, 14:37
получается, что степень 0.33 - это 33/100, то есть ты отрицательное число x возводишь в 33 степень - получается опять же отрицательное число, а потом от него пытаешься вычислить корень четной степени - а это математически неверно
1
TECHNO
 Аватар для Василий-Робот
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
28.12.2010, 14:52  [ТС]
тогда как вообще считать корни выражений степеней больше двух? Даже если я напишу pow(x,0.4) или (x,0.16) (возвожу в четную степень и извлекаю корен четной степени), то все равно на отрицательных значениях икс - чушь
0
 Аватар для deadlock
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
28.12.2010, 14:56
видимо внутреннее устройство pow() так себя ведет.
0,4 = 2/5, сначала y=pow(x,2) потом pow(y,0.2) - так работает.
1
TECHNO
 Аватар для Василий-Робот
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
28.12.2010, 15:06  [ТС]
deadlock, спасибо, конечно, но все равно проблему это не решило. Я думал, что с помощью pow можно любую степень извлекать, а оказалось, что нельзя толком извлечь даже кубический корень 0_0
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.12.2010, 15:31
Цитата Сообщение от Василий-Робот Посмотреть сообщение
Я думал, что с помощью pow можно любую степень извлекать, а оказалось, что нельзя толком извлечь даже кубический корень 0_0
http://www.manpagez.com/man/3/pow/

pow(x, y) returns a NaN and raises the "invalid" floating-point exception for finite x < 0 and finite non-integer y.
К тому же запись 1/3 в конечном счёте означает ноль, поскольку делается целочисленное деление. Нужно писать "1.0/3" (или "1.0/3.0")
1
TECHNO
 Аватар для Василий-Робот
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
28.12.2010, 15:37  [ТС]
Evg, я написал, как сказали вы:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <conio.h>
#include <stdio.h>
#include <math.h>
int main()
{
    int i;
    double x=-1.95;
    for(i=0;i<50;i++)
    {
                     x+=0.05;
                     double y=pow(x,(1.0/3.0))-pow((x+1),(1.0/3.0));
                     printf("x = %g\ny = %g\n",x,y);
    }
    getch();
    return 0;
}
Результат до нуля опять очень кривой
0
 Аватар для deadlock
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
28.12.2010, 15:40
скачай библиотеку gmp))
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.12.2010, 16:07
Цитата Сообщение от Василий-Робот Посмотреть сообщение
Результат до нуля опять очень кривой
Забыл главное написать. В общем случае нельзя отрицательное число возводить в нецелую степень. Для этого нужно руками знак менять. В твоём случае, грубо говоря, для отрицательного x нужно пользоваться формулой "x^(1/3) = -((-x)^(1/3))"
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2010, 16:48
Василий-Робот, вы математику не знаете? При извелечении корня из отрицательного числа ответ получается в виде комплексного числа ( i ). Попробуйте на калькуяторе сделать, то, что пытаетесь в коде, наверное удивитесь)))
0
TECHNO
 Аватар для Василий-Робот
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
28.12.2010, 17:29  [ТС]
Моя математика прекрасна И если посчитать в калькуляторе кубический корень из минуса двух (например), то ответ будет -1.25992105.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2010, 17:34
Вы попробуйте, например, в Windows калькуляторе, который знает математику.

Добавлено через 2 минуты
кубический корень из минуса двух (например), то ответ будет -1.25992105.
а правильный ответ https://www.cyberforum.ru/cgi-bin/latex.cgi?{i}^{2}+1.25992105, где https://www.cyberforum.ru/cgi-bin/latex.cgi?{i}^{2}=-1
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.12.2010, 17:49
Kastaneda, во-первых, ответ-то неверный, ибо ваша запись равна 0,25599..., что не есть кубический корень из -2. Скорее всего вы вместо "*" поставили "+". А во-вторых, арифметический кубический корень из -2 прекрасно представляется без комплексных чисел, только в действительных, и равен, как уже было сказано, -1,25992104... То, что калькулятор может вычислить его в таком виде, как привели вы, это, скорее всего, особенность численного метода, который в нём применяется
2
TECHNO
 Аватар для Василий-Робот
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
28.12.2010, 17:53  [ТС]
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
42
43
44
#include <conio.h>
#include <stdio.h>
#include <math.h>
int main()
{
    int i;
    double x=-1.95;
    for(i=0;i<50;i++)
    {
                     x+=0.05;
                     if (x<-1)
                     {
                     double y=-(pow(-x,(1.0/3.0))-pow(-(x+1),(1.0/3.0)));
                     printf("x = %g\ny = %g\n",x,y);
                     }
                     else
                     {
                     if (x<0 && x>-1)
                     {
                     double y=-pow(-x,(1.0/3.0))-pow((x+1),(1.0/3.0));
                     printf("x = %g\ny = %g\n",x,y);
                     }
                     else
                     {
                     if (x>0)
                     {
                     double y=pow(x,(1.0/3.0))-pow((x+1),(1.0/3.0));
                     printf("x = %g\ny = %g\n",x,y);
                     }
                     else
                     {
                     if (x==0)
                     {
                     double y=pow(x,(1.0/3.0))-pow((x+1),(1.0/3.0));
                     printf("x = %g\ny = %g\n",x,y);
                     }    
                     }
                     }
                     }
                             
    }
    getch();
    return 0;
}

Kastaneda, не буду спорить, ибо у меня для этого нет базы, комплексные числа мы будем проходить в следующем семестре.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2010, 17:55
Цитата Сообщение от silent_1991 Посмотреть сообщение
Скорее всего вы вместо "*" поставили "+".
ага


silent_1991, не берусь с тобой спорить по части матемаике, но Windows калькулятор (calc.exe) солидарен со мной)

Цитата Сообщение от silent_1991 Посмотреть сообщение
А во-вторых, арифметический кубический корень из -2 прекрасно представляется без комплексных чисел, только в действительных, и равен, как уже было сказано, -1,25992104...
-1,25992104 * -1,25992104== - * - = + , а должно быть минус.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.12.2010, 17:58
Kastaneda, так, а мы какой корень-то всё-таки вычисляем?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2010, 18:01
Василий-Робот, сейчас глянул, википедия говорит, что можно извлечь корень из орицательного числа, если степень корня не четная, так что неправильный результат при pow(x,(1.0/3.0)) - это похоже особенность реализации ф-ции pow()

Добавлено через 1 минуту

Не по теме:

silent_1991, да, заморочился)), но calc.exe все равно этого не умеет, хотя должен)

0
28.12.2010, 18:02

Не по теме:

Kastaneda, да calc.exe много чего не умеет...

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.12.2010, 18:05
Василий-Робот, а не проще ли написать функцию типа

C
1
2
3
4
5
6
7
8
/* Вычисление кубического корня из числа x */
double my_pow13 (double x)
{
  if (x >= 0)
    return pow (x, 1.0/3.0);
  else
    return - pow (-x, 1.0/3.0);
}
?

Добавлено через 2 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
Василий-Робот, сейчас глянул, википедия говорит, что можно извлечь корень из орицательного числа, если степень корня не четная, так что неправильный результат при pow(x,(1.0/3.0)) - это похоже особенность реализации ф-ции pow()
1.0/3.0 в плавющем машинном хранится лишь приблизительно (т.е. это НЕ эквивалентно математическому значению 1/3). А потому pow в принципе не может работать математически правильно с корнями целых степеней.
0
TECHNO
 Аватар для Василий-Робот
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
28.12.2010, 18:29  [ТС]
Evg, в данном случае (ваш код) не проще. Так как мы извлекаем кубический корень из (1+x) и там знаки меняется не так как в функции x. Можно при x и x+1 держать числа a и b соответственно, чтобы возвращать их значение -1 или 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2010, 18:29
Помогаю со студенческими работами здесь

Вывести таблицу значений функции на заданном интервале
Доброго вечера. Написала код, но не могу проверить до конца простой подстановкой. Путаюсь, взгляд замылился. Помогите, пожалуйста,...

Вывести таблицу значений функции на заданном интервале
Прошу,помогите не вылететь из института пожалуйста ((( Заранее благодарен Для функции...

Найти значение минимума функции на заданном интервале (дихотомия)
Разработать программу, находящую значение минимума значения функции на заданном интервале. Метод дихотомии. Библиотеки, реализующие...

Вычислить и вывести в виде таблицы значения функции F в заданном интервале
Помогите пожалуйста! Нужно Вычислить и вывести в виде таблицы значения функции F на интервале от x0 до xk c шагом ∆x. ( ...

Вычислить и вывести на экран в виде таблицы значения функции f на заданном интервале
Надо сделать эту задачу через структуру, помогите надо срочно отдать


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru