Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> большие целые числа, как сделать 
V
    Опции темы
motorway
  Дата 5.11.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Каким образом в php можно возводить в степень большие целые числа и складывать их?

 smile 

Например, нужно вычислить p^m1+q^m2+r^m3, где все числа достаточно большие, так что приходится использовать представление в виде строк.

На входе 3 числа и 3 степени, на выходе результат вычисления.

Это сообщение отредактировал(а) motorway - 5.11.2008, 21:51
PM MAIL   Вверх
ekianu
Дата 5.11.2008, 22:15 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

bcadd(bcadd(bcpow($p, $m1), bcpow($q, $m2)),bcpow($r, $m3)


если bcmath медлить, то используй gmp.
PM MAIL Skype   Вверх
motorway
Дата 5.11.2008, 22:26 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



респект  smile 
PM MAIL   Вверх
motorway
Дата 7.11.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а как лучше всего проверять, является ли корень из большого числа целым числом?
PM MAIL   Вверх
ksnk
Дата 7.11.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

Репутация: 96
Всего: 386



Поискать в строковом представлении букву E или символ '.' 
Imho, bcmath все равно работает со строками...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
motorway
Дата 7.11.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а как извлечь корень нормально из большого числа?
PM MAIL   Вверх
NLspieler
Дата 7.11.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 16
Всего: 19



Цитата

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

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

Код

/* Функция определяет целый ли корень из числа, и если да, то возвращает 1, иначе 0 */

function   sqrt_z ( $Ein )

  $Ein = sqrt ($Ein) ;
  $Rund = round ( $Ein ) ;    

  if ( $Ein == $Rund )                              
  {
    $irr  =  0  ;                                    
  }
  elseif ( $Ein <> $Rund )
  {
    $irr  =  1  ;                                    
  } 
  return $irr  ;                                     
}




Цитата

а как извлечь корень нормально из большого числа?

Что значит нормальное извлечение корня? 

PM MAIL   Вверх
motorway
Дата 24.9.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как извлечь корень произвольной степени из большого числа с помощью BCMath? Напр., корень 5-й степени.
PM MAIL   Вверх
NLspieler
Дата 24.9.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 16
Всего: 19



Цитата(motorway @ 24.9.2009,  19:33)
Как извлечь корень произвольной степени из большого числа с помощью BCMath? Напр., корень 5-й степени.

Код

$Number = '8376827' ;  //Число в виде строки
$Stepen = '56' ;              // Корень какой степени нужно извлечь
echo bcpow($Number, 1 / $Stepen, 15);  //Функция возведения в степень 

PM MAIL   Вверх
motorway
Дата 24.9.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



у меня такая штука выводит 1. В мануале был коммент, что эта функция не может исп. с дробными степенями :(
PM MAIL   Вверх
NLspieler
Дата 25.9.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 16
Всего: 19



Да, проверил, и правда не работает.

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

Если придумаю, запощу здесь результат. 
PM MAIL   Вверх
NewDima
Дата 25.9.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



NLspieler, на сколько я знаю, это не возможно сделать
PM ICQ   Вверх
Akina
Дата 25.9.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Подбором, собсно... с заданной точностью. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Simpliest
Дата 25.9.2009, 16:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Корень n-й степени из числа a, где e = 2.718... (Число Эйлера), а Ln() - натуральный логарифм.

Код

X = e^((1/n) * Ln(a))


Форумулы расчета натурального логарифма можете найти сами в сети smile

Добавлено через 1 минуту и 59 секунд
А можете воспользоваться таблицами.

Добавлено через 4 минуты и 40 секунд
Вот кстати, готовое решение для Ln()

http://ua2.php.net/manual/en/function.bcpow.php

первый же пример.


--------------------
user posted image
PM   Вверх
NLspieler
Дата 25.9.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 16
Всего: 19



Цитата(Simpliest @  25.9.2009,  16:21 Найти цитируемый пост)
X = e^((1/n) * Ln(a))

Если бы была бы возможность возводить bc числа в дробную степень,
то тогда было бы вполне достатоно использовать формулу 

Код

подкорень ^ (1 / степень_корня)


Но так как, bcpow не может возводить число в дробную степень, поэтому нужно искать другое решение.


Цитата(Akina @  25.9.2009,  16:10 Найти цитируемый пост)
Подбором, собсно... с заданной точностью. 

Подбором, это как то не спортивно, да и времени займет недопустимо много.

Цитата(NewDima @  25.9.2009,  15:39 Найти цитируемый пост)
NLspieler, на сколько я знаю, это не возможно сделать

Извлекать корни 2, 4, 8, 16, 32 и т.д. при помощи bcsqrt не составляет труда. 
Если удастся найти натуральное число x
Код

s*x = 2^n
    (
        все переменные числа натуральные, 
        s - изначальная степень, для извлечения корня. 
    )

то тогда задача будет решена. 
Вопрос в том, существует ли подходящее число для любого натурального s.
Если нет, то задача и вправду не разрешимая таким методом. 

Это сообщение отредактировал(а) NLspieler - 25.9.2009, 17:21
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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