C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Натуральный логарифм и экспонента в Math.hpp  (Прочитано 5465 раз)
Nub
Участник
**

Сказали спасибо: +2/-0
Offline Offline

Сообщений: 4


« : 29 апреля 2013, 08:25:35 »

Уважаемые эксперты, помогите разрешить маленький вопрос: пишу прогу с математическими расчётами, стандартные функции беру из Math.hpp, иначе будет как вот здесь пропускать исключения.

Нужны натуральный логарифм и константа e. С логарифмом ещё разберусь, хотя нашёл в справке только Log10 (десятичный), Log2 (по основанию 2) и LogN (по другому основанию).
Но другое основание - число e, не писать же 2.718...
Есть ли варианты получить число e кроме

Код:
#include <Math.hpp>
#include <math.h>

и использования константы M_E из последней библиотеки?

Препод утверждает, что есть, а я нигде в Гуглах не нашёл Грустный
И ещё - по ссылке упоминается  System::Ln - у меня такое не работает.
Билдер старый, 6 версии.
Записан
S0mbre
Глобальный модератор
***

Сказали спасибо: +1113/-22
Offline Offline

Сообщений: 2137

S0mbre


WWW
« Ответ #1 : 29 апреля 2013, 11:42:46 »

Можно вывести экспоненту при помощи ряда Тейлора с любой точностью. Например
Код
unsigned __int64 factorial(const unsigned __int64 x)
{
return (x==0)? 1L : (x * factorial(x-1));
}
 
double exponent(unsigned prec=20)
{
if(prec < 10) prec = 10; prec += 3;
double e(2.5f);
for(register int i=3; i<prec; i++) e += 1.0f / factorial(i);
}
 

Вычисление E:
Код
double E = exponent(); // кол-во итераций = 20
E = exponent(10);       // кол-во итераций = 10
 

PS. Для достижения двойной точности (double) достаточно 20 итераций.
« Последнее редактирование: 29 апреля 2013, 11:47:54 от S0mbre » Записан
Nub
Участник
**

Сказали спасибо: +2/-0
Offline Offline

Сообщений: 4


« Ответ #2 : 29 апреля 2013, 12:51:55 »

Спасибо, красиво, но сложновато для такой работы... скажу, что ещё в ряд можно разложить - может отстанет Улыбка
Наверное, ограничусь определением, стыренным из math.h
Код:
#define M_E         2.71828182845904523536
Просто удивило, что в Math.hpp нет всех этих констант и метода для натурального логарифма
Записан
kitaets
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 4


« Ответ #3 : 11 марта 2015, 17:58:13 »

  Вообще-то в math.h есть log() и logl(), это и есть натуральный логарифм, соответственно для double и long double (у меня тоже Borland6).

  Кстати, "ln" - это только у нас так принято обозначать нат. логарифм, англы обозначают его как раз "log".

 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в: