LINUX.ORG.RU

[C++] Возведение с дробную степень.

 


0

0

Столкнулся с необходимостью возвести отрицательное число в дробную степень.
Например -2^2.3
pow( -2, 2.3 ) выдает non
Emacs'oвский калькулятор тоже не может посчитать
А вот kcalc посчитал
Как обходить такие ситуации?


брать по модулю. не знаю, как в kcalc, а в математике, например, не определены дробные степени отрицательного числа

rumata_0
()
Ответ на: комментарий от rumata_0

Ну если степень рациональная, то какие проблемы? Представить в виде неправильной дроби и готово

Gorthauer ★★★★★
()
Ответ на: комментарий от rumata_0

Брать по модулю была первая моя идея.
Но я буду получать положительный ответ, потом конечно можно приписать минус, но как то не очень красиво
В kcalc я получаю отрицательный результат например -2^2.3 = -4.92457765338
Не знаю как там это реализована, но думаю если полезу в исходники убью много времени прежде чем пойму как это сделано.
Вобще задача не моя(подруга дала дохрена формул со словами «вот так это все считается» и сама свалила), по этому не знаю как должна себя вести программа. Может при отрицательных числах вобще не должны считаться.

n4ela
() автор топика

>возвести отрицательное число в дробную степень.
....

Как обходить такие ситуации?


man комплексные_числа

ttnl ★★★★★
()

(найти более другую)/(написать свою функцию) возведения в степень?

> (expt -2 2.3)
2.894594118425646+3.9840670117032446i
korvin_ ★★★★★
()
Ответ на: комментарий от n4ela

Забыл дописать 2.3 не меняется. Задается только число которое будет возводится в степень.

n4ela
() автор топика
Ответ на: комментарий от n4ela

> В kcalc я получаю отрицательный результат например -2^2.3 = -4.92457765338

это потому, что приоритет операции ^ выше приоритета операции -

попробуй в калке как-нибудь так: (-2)^2.3

korvin_ ★★★★★
()

подсказка: чему там равен квадратный корень из -1 ?

Reset ★★★★★
()
Ответ на: комментарий от n4ela

Если ответ -4.92457765338 вам кажется правильным, то используйте -pow(-2,2.3)

anonymous
()
Ответ на: комментарий от dimon555

не прогуливать математику?

Давно нет такого предмета.

Понял почему kcalc выдавал хоть какой то результат

это потому, что приоритет операции ^ выше приоритета операции -

n4ela
() автор топика

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

mono ★★★★★
()
Ответ на: комментарий от rumata_0

> а в математике, например, не определены дробные степени отрицательного числа

Похоже, вы в школе прогуливали уроки математике. Спросите у своего учителя, сколько будет, например, -27 в степени 1/3.

akk ★★★★★
()
Ответ на: комментарий от mono

> либо не работаешь в комплесной плоскости, тогда извлекать корень из отрицательного числа нельзя.

Вы тоже математику прогуливали? Возведите (-27) в степень 1/3.

akk ★★★★★
()
Ответ на: комментарий от akk

и вообще man экспоненциальная форма записи комплексного числа

Gorthauer ★★★★★
()

-2 ^ 2.3 -2 ^ (2 3/10) -2 ^ (23/10)

При любом порядке вычислений получаем корень положительной степени из отрицательного числа, то есть 5 пар комплексно-сопряжённых чисел.

akk ★★★★★
()
Ответ на: комментарий от akk

Про форматирование забыл. :(

(-2) ^ 2.3

(-2) ^ (2 3/10)

(-2) ^ (23/10)

((-2) ^ 23) ^ (1/10) или ((-2) ^ (1/10)) ^ 23

akk ★★★★★
()
Ответ на: комментарий от akk

>>5 пар комплексно-сопряжённых чисел

Комплексно-сопряженными будут только 4 пары.

mclaudt
()
Ответ на: комментарий от beastie

альтернативно:

#include <complex.h>
#include <stdio.h>

int
main()
{
        complex c;

        c = cpowf(-2, 2.3);
        printf("%.3f + %.3fi\n", creal(c), cimag(c));

        return 0;
}
beastie ★★★★★
()
Ответ на: комментарий от mono

>ибо не работаешь в комплесной плоскости, тогда извлекать корень из отрицательного числа нельзя.

А он не корень извлекает, а в квадрат возводит... С небольшим.

Но - да, без комплексных тут нельзя ;)

KRoN73 ★★★★★
()
Ответ на: комментарий от akk

>Смешно.

Дело в том, что в математике понятие «корня» применяется к обратным целым степеням.

Если же степень больше единицы, то корнем это очень трудно назвать :)

KRoN73 ★★★★★
()
Ответ на: комментарий от akk

>> либо не работаешь в комплесной плоскости, тогда извлекать корень из отрицательного числа нельзя.

Вы тоже математику прогуливали? Возведите (-27) в степень 1/3.

Получается полтора и примерно 2.6i. Без комплексной плоскости не могу. ЧЯДНТ?

x3al ★★★★★
()
Ответ на: комментарий от x3al

>>Вы тоже математику прогуливали? Возведите (-27) в степень 1/3.

Получается полтора и примерно 2.6i. Без комплексной плоскости не могу. ЧЯДНТ?


Э... А -3 уже тоже не существует без комплексной плоскости? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от s0ul

ln(-2) == i Pi + ln(2), ы?

альтернативный вариант я уже привёл. вот ещё один:

#include <complex.h>
#include <stdio.h>

int
main()
{
        complex c, d;
        double x, n;

        x = -2;
        n = 2.3;

        c = cexp(n * clog(x));

        printf("%.3f + %.3fi\n", creal(c), cimag(c));

        return 0;
}
beastie ★★★★★
()
Ответ на: комментарий от x3al

>А ответы из комплексной плоскости выкидывать? =)

А какое они отношение имеют к утверждению «Без комплексной плоскости не могу»? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

у x == (-27)^(1/3) три решения: x == {1.5 + 2.598 i, -3, 1.5 - 2.598 i}

корнем формально считается первое, т.е. 1.5 + 2.598 i т.ч. без комплексной плоскости ни как.

beastie ★★★★★
()
Ответ на: комментарий от beastie

Я хренею. Я просто хренею. У меня слов нет.

akk ★★★★★
()
Ответ на: комментарий от s0ul

> я думаю он имел ввиду корень четной степени

Мои телепатические способности весьма слабы, поэтому я не смог определить, что он имел в виду. Но в любом случае, корень чётной степени прекрасно извлекается из любых чисел.

akk ★★★★★
()
Ответ на: комментарий от beastie

Не столько формально, сколько по традиции. Обычно (без учета комплексных значений) говорят о «корне», а подразумевают «арифметический корень». Единственное значение, не множество. Например, корень из 4 — это +2 и -2, а арифметический — только +2).

anonymous
()
Ответ на: комментарий от beastie

Корень n-й степени

Корень имеет несколько значений и они равноправны (иначе зачем вообще было придумывать эти комплексные числа?). Анонимный скрипт не нужно, популярно про числа - здесь: http://publ.lib.ru/ARCHIVES/B/"Bibliotechka_"Kvant"/_"Bibliotechka_"Kvan...

asaw ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.