Имя: Пароль:
1C
 
Возведение в степень или "ряд Маклорена"
0 Mondeo
 
04.07.05
10:45
Понадобилось мне ту давеча возвести в степень. Полез на синор за аналогичной функцией. И что я там нахожу? Произведение высшей математики. Одна фраза -
"Функция ПpeднaЗначeнa для иcчиcлeния cтeпeннoй функции c пpимeнeниeм
pядa Maклopeнa (чacтный cлучaй pядa Tэйлopa)". Если кто то сейчас скажет - "а ты что! не знаешь что такое ряд Маклорена?", я гордо подниму голову и скажу - да, я не знаю!
Вот мой алгоритм возведения в степень:
//Знач1 = Возводимое
//Знач2 = Степень
Функция Степень(Знач1, Знач2) Экспорт
   ВозЗнач = Знач1;
   Для х = 1 По Знач2 - 1 Цикл
       ВозЗнач = ВозЗнач * Знач1;
   КонецЦикла;                      
   Возврат ВозЗнач;
КонецФункции
1 Груздь
 
04.07.05
10:46
А в дробную степень как возвести используя твой шедевр?
2 Mondeo
 
04.07.05
10:54
Да с дробной проблемы будут :) Но и с "частным случаем Тейлора" (гыгыгы. Прошу прощения у высших математиков) в дробную степень не возведешь.
3 NS
 
04.07.05
10:55
Возведение в степень нужно делать через Экспоненту.
Логарифм в 1С уже есть.
Написать пример?
4 Irbis
 
04.07.05
10:59
Функция Exp(x)
    Если x<0 Тогда
         dExp=(-1)*x;Mx=(-1)*x;
    Иначе
         dExp=1*x;Mx=1*x;
    КонецЕсли;
    Exp=1;N=1;
    Пока dExp>0.0000000000000000001 Цикл
         Exp=Exp+dExp;
         dExp=dExp*Mx/(N+1);
         N=N+1;
    КонецЦикла;
    Если x<0 Тогда
         Возврат 1/Exp;
    Иначе
         Возврат Exp;
    КонецЕсли;
КонецФункции //Exp(x)

Кто хочет может перенести точность в параметры процедуры. Используя натуральный логарифм и данную функцию можно возводить числа в любую положительную степень.
5 NS
 
04.07.05
11:02
(4) Конечно прикольно...
Но что мешает возводить в отрицательную???
Формула:
а^в=Экспонента(Лог(а)*в);
6 Asmody
 
04.07.05
11:01
тэкс-тэкс-тэкс...
может еще библиотеку для работы с комплексными числами или длинную арифметику на 1С напишете?
7 Irbis
 
04.07.05
11:06
(5)Логарифм батенька с отрицательными числами плоховато работает, но ежели в комплексной плоскости надо, то нет проблем.
8 NS
 
04.07.05
11:08
Функция Экспонента(Х)
   Р=1;
   Дельта=1;      
   К=1;
   Пока ?(Дельта>0,Дельта,-Дельта)>0.000001 Цикл
       Дельта=Дельта*Х/К;
       К=К+1;
       Р=Р+Дельта;
   КонецЦикла;
   Возврат окр(Р,5);    
КонецФункции    
Функция степень(а,в)
   возврат Экспонента(Лог(а)*в);
КонецФункции    
//*******************************************
Процедура Сформировать()
   сообщить("3^3="+Степень(3,3));
   сообщить("4^0.5="+Степень(4,0.5));
   сообщить("2^(-1)="+Степень(2,-1));
КонецПроцедуры
9 ANS
 
04.07.05
11:20
(8) //