Как найти кубический корень паскаль

Y = Root3(X)

Для вычисления кубического корня в Паскале нет стандартной функции (в отличие от квадратного корня), однако, его можно вычислить, используя функции экспоненты и логарифма. Извлечение кубического корня — это возведение в степень 1/3, а для положительных чисел возведение в любую степень можно осуществить по формуле

axexlna.png
x13exp13lnx.png

Для отрицательных чисел логарифм не определён. Чтобы вычислить кубический корень из отрицательного числа, воспользуемся свойством нечётности кубического корня:

sqrt3mxmsqrt3x.png

Наконец, кубический корень из 0 — это 0. Логарифм 0 — это «минус бесконечность», и, хотя некоторые реализации Паскаля могут работать со значением «минус бесконечность», лучше избегать этого специального значения.

Таким образом, получаем:

program TryRoot3;

function Root3(X: Real): Real;
begin
 if X = 0.0 then
    Root3 := 0.0
 else if X > 0.0 then
    Root3 := Exp(Ln(X) / 3)
 else
    Root3 := Exp(Ln(X) / 3)
end;

begin
 WriteLn(Root3(27.0):0:0, ‘ ‘, Root3(8.0):0:0, ‘ ‘, Root3(0.0):0:0);
 { 3 -2 0 }
end.

Смотри также

  • Sqrt(X) — квадратный корень
  • Exp(X) — экспонента
  • Ln(X) — натуральный логарифм
  • Кубический корень в Wikipedia
  • Показательная функция (экспонента) в Wikipedia
  • Натуральный логарифм в Wikipedia

Голосование за лучший ответ

Alexander Grachev

Мыслитель

(6601)


11 лет назад

exp (ln (x) / 3)

АнГеЛиНа

Ученик

(184)


11 лет назад

sqrt(x) – корень кубический

Dmitry Lysy

Мастер

(1007)


11 лет назад

стандартной функции нету, нужно через логарифм:
exp (ln (x) / 3)

зы sqrt – это квадратный корень!

ЕвгенийНеизвестный

Знаток

(470)


11 лет назад

Во первых sqrt это квадратный корень. Во вторых правильно будет exp(ln(x)*(1/3))

Николай Михайлович

Ученик

(226)


4 года назад

exp (ln (x) / 3)

Проблема в том, что специальной функции для кубического корня в Паскале нет. Поэтому приходится выкручиваться через логарифмы. А логарифмы нравятся не всем. Точнее, почти всем не нравятся. Мы просто воспользуемся формулой:

[sqrt[3]{x}=expleft(frac{1}{3}lnxright)]

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

program TryRoot3;
function Root3(X: Real): Real;
begin
 if X = 0.0 then
 Root3 := 0.0
 else if X > 0.0 then
 Root3 := Exp(Ln(X) / 3)
 else
 Root3 := -Exp(Ln(-X) / 3)
end;

begin
 WriteLn(Root3(27.0):0:0, ' ', Root3(-8.0):0:0, ' ', Root3(0.0):0:0);
 { 3 -2 0 }
end.

 

Похожие публикации: Pascal

Как извлеч кубический корень в Паскале?

Как извлекать квадратный корень я знаю, можно ли придавать корню нужную степень?

На этой странице находится вопрос Как извлеч кубический корень в Паскале?. Здесь же – ответы на него,
и похожие вопросы в категории Информатика, которые можно найти с помощью
простой в использовании поисковой системы. Уровень сложности вопроса
соответствует уровню подготовки учащихся 10 – 11 классов. В комментариях,
оставленных ниже, ознакомьтесь с вариантами ответов посетителей страницы. С
ними можно обсудить тему вопроса в режиме on-line. Если ни один из
предложенных ответов не устраивает, сформулируйте новый вопрос в поисковой
строке, расположенной вверху, и нажмите кнопку.

Cortex1998

18 / 18 / 11

Регистрация: 05.01.2014

Сообщений: 119

Записей в блоге: 2

23.11.2014, 22:43

2

Лучший ответ Сообщение было отмечено как решение

Решение

В общем случае вас интересует
z = x^y, где y=1/3
но так как своей функции возведения в степень у паскаля нет (значок ^ именно возведение в степень) , то ее можно математически переписать как
ln z = y * ln x
если теперь это является степенью экспоненты, то получим
z = Exp(Ln z) = Exp(y* Ln x)
так что можно ввести функцию

Pascal
1
2
3
4
function PowerFn (number, exponent: float): float; 
begin 
PowerFn := Exp(Exponent*Ln(Number)); 
end;

где Number – число, которое возводится в какую то Exponent степень

вызываете ее как
PowerFn(x, 1/3) и она возвращает корень третьей степени из x



1



Cyborg Drone

Модератор

9584 / 4904 / 3244

Регистрация: 17.08.2012

Сообщений: 15,324

25.11.2014, 01:29

3

Ага, возвращает. Если x > 0. В остальных случаях вылетает, так как ln(x) при x ≤ 0 не определён. Правильно примерно так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function PowerFn(x, y: real): real;
begin
  if x = 0
    then PowerFn := 0
    else if y = 0
      then PowerFn := 1
      else if x > 0
        then PowerFn := exp(ln(x) * y)
        else if frac(y / 2)=0
          then PowerFn := exp(ln(abs(x)) * y)
          else PowerFn := -exp(ln(abs(x)) * y)
end;

И то здесь не учитываются неопределённость 00 и корни чётных степеней из отрицательных чисел.

Для корня кубического, в частности, правильно, например, так:

Pascal
1
2
3
4
5
6
7
8
function pow_3(x: real): real;
begin
  if x = 0
    then pow_3 := 0
    else if x > 0
      then pow_3 := exp(ln(x) / 3)
      else pow_3 := -exp(ln(abs(x)) / 3)
end;

Ну и… Так как степень – 1/3, этот фрагмент кода никаких подвохов не содержит.



0



Добавить комментарий