Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> корректное возведение в степень (pascal), из дркб; нп -5^(-2/3) 
:(
    Опции темы
kuzyara
Дата 21.10.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 13.11.2006

Репутация: нет
Всего: 1



знаю, что есть такая функция в модуле math, но не знаю где его взять, 
также знаю что в дркб 2.3 тоже есть такая функция, но не знаю почему она не работает?:
Код

{$N+}
function power(Base, Exponent: Extended): Extended; 
var ex: extended; 
begin 
  power := 0; 
  if (exponent <> 0) 
    and (frac(trunc((1 / exponent) * 1000000) / 1000000) = 0) 
    and (base < 0) then 
    begin 
      if round(1 / exponent) mod 2 = 0 then exit; 
      ex := Exp(Exponent * Ln(-Base)); 
      power := -ex; 
    end 
  else 
    begin 
      if Exponent = 0.0 then 
        power := 1.0 
      else if (Base = 0.0) and (Exponent > 0.0) then 
        power := 0.0 
      else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then 
        power := IntPower(Base, Integer(Trunc(Exponent))) 
      else 
        power := Exp(Exponent * Ln(Base)) 
    end; 
end;

запинается на "IntPower"... И действительно, что это такое?
--------------------
подпись
PM MAIL   Вверх
volvo877
Дата 21.10.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 9
Всего: 116



Цитата(kuzyara @  21.10.2007,  08:48 Найти цитируемый пост)
И действительно, что это такое? 

 smile Функция из модуля Math, что ж еще? Ты Math в список Uses добавил?

(а если тебе надо для Паскаля, а не для Дельфи - то тему надо было в соответствующем разделе создавать!)

Добавлено через 10 минут и 50 секунд
Кстати, эта функция не предназначена для возведения в степень при отрицательном основании, о чем сказано в комментариях, так что все равно получишь "Invalid Floating Point Operation"...
PM MAIL   Вверх
Ofer
Дата 21.10.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



IntPower(Base, Exponent) возводит Base в степень, указанную в Exponent
Если у тебя выбивается ошибка Undeclared identifier 'IntPower', то подключи модуль Math

Код

uses Math;


P.S. Читай справку.
PM MAIL ICQ   Вверх
kuzyara
Дата 21.10.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 13.11.2006

Репутация: нет
Всего: 1



Цитата(volvo877 @  21.10.2007,  15:02 Найти цитируемый пост)
Добавлено через 10 минут и 50 секундКстати, эта функция не предназначена для возведения в степень при отрицательном основании, о чем сказано в комментариях, так что все равно получишь "Invalid Floating Point Operation"...

в комментариях то как-раз сказано: 
Цитата

Теперь можем вычислить нечетный корень из отрицательного числа
 
Ищё раз напомню, что этот пример из дркб2.3.


Цитата(Ofer @  21.10.2007,  15:16 Найти цитируемый пост)
IntPower(Base, Exponent) возводит Base в степень, указанную в ExponentЕсли у тебя выбивается ошибка Undeclared identifier 'IntPower', то подключи модуль Mathкод Pascal/Delphi1:uses Math;highlightSyntax('delphi_MmM1Yz','delphi');highlightSyntax('delphi_MmM1Yz','delphi');P.S. Читай справку.

В том то и дело, что паскаль не находит у меня этот модуль! Где его скачать можно? Не подскажите?
--------------------
подпись
PM MAIL   Вверх
Ofer
Дата 21.10.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



kuzyara, я как понимаю ты на Паскале(Тубро Паскале) пишеш? То тогда с Паскалем библиотека Math не поставляется. Она есть в С++, есть в Delphi. Соответственно и возведения в степень в Паскале нет. Попробуй воспользоватся альтернативным вариантом, замени IntPower на свою функцию:

Код

function Pow(Base : Extended; Exponent : Integer): Extended;
var
  i : Integer;
  n : Extended;
begin
  n := 1;
  for i := 0 to Exponent - 1 do
  n := n * Base;
  Pow := n;
end;


или можно как описано в Math.pas  smile 

Код

function IntPower(const Base: Extended; const Exponent: Integer): Extended;
asm
        mov     ecx, eax
        cdq
        fld1                      { Result := 1 }
        xor     eax, edx
        sub     eax, edx          { eax := Abs(Exponent) }
        jz      @@3
        fld     Base
        jmp     @@2
@@1:    fmul    ST, ST            { X := Base * Base }
@@2:    shr     eax,1
        jnc     @@1
        fmul    ST(1),ST          { Result := Result * X }
        jnz     @@1
        fstp    st                { pop X from FPU stack }
        cmp     ecx, 0
        jge     @@3
        fld1
        fdivrp                    { Result := 1 / Result }
@@3:
        fwait
end;


Это сообщение отредактировал(а) Ofer - 21.10.2007, 16:29
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.