forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Математика в МР. (http://forum.boolean.name/showthread.php?t=12241)

GRAY_WOLF 21.03.2010 21:11

Математика в МР.
 
В справке не нашел, как извлечь из числа корень "n"- ой степени. Это возможно?

ViNT 21.03.2010 22:41

Ответ: Математика в МР.
 
Корень n степени из числа k есть число k в степени 1/n.
Если нет никаких глюков, должна сработать функция Pow, т.е. x:=pow(k,1/n).

GRAY_WOLF 21.03.2010 23:36

Ответ: Математика в МР.
 
Цитата:

Сообщение от ViNT (Сообщение 142638)
Корень n степени из числа k есть число k в степени 1/n.
Если нет никаких глюков, должна сработать функция Pow, т.е. x:=pow(k,1/n).

По идее x:=pow(3125,1/5); должно быть 5 , т.к. 5 ^ 5 = 3125, а в ответе 1 при любых значениях.
PHP код:

var xreal;
Begin
x
:=pow(3125,1/5);
    
DrawText(''+x00);
    
Repaint;    
    
Delay(5000);
End


ViNT 21.03.2010 23:40

Ответ: Математика в МР.
 
Видимо, функция pow криво реализована.
Тогда нужно использовать такую формулу, с ней должно сработать: X^Y = exp(ln(X) * Y)

GRAY_WOLF 22.03.2010 00:00

Ответ: Математика в МР.
 
Вложений: 1
Цитата:

Сообщение от ViNT (Сообщение 142651)
Видимо, функция pow криво реализована.
Тогда нужно использовать такую формулу, с ней должно сработать: X^Y = exp(ln(X) * Y)

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

ViNT 22.03.2010 00:40

Ответ: Математика в МР.
 
Библиотеку пока написать не могу, времени нет совсем.
Могу предложить такую функцию (для целых чисел):
PHP код:

function root(a:integer;n:Integer):real;
var 
rreal;
begin
 r
:=exp(log(abs(a))/n); 
 if 
a<0 then root:=-else root:=r
end


Переписал для вещественных:
PHP код:

function root(a:real;n:real):real;
var 
rreal;
begin
 
if a<0 then a:=-a;
 
r:=exp(log(a)/n);            
 if 
a<0 then root:=-else root:=r  
end



Bruteo 22.03.2010 11:59

Ответ: Математика в МР.
 
Цитата:

Сообщение от GRAY_WOLF (Сообщение 142649)
По идее x:=pow(3125,1/5); должно быть 5 , т.к. 5 ^ 5 = 3125, а в ответе 1 при любых значениях.

Возможно, дело в использовании режима Floating point, который не на всех телефонах даёт правильные результаты при расчётах.

impersonalis 22.03.2010 12:02

Ответ: Математика в МР.
 
1/5=0
1/5.0 не?

GRAY_WOLF 22.03.2010 12:39

Ответ: Математика в МР.
 
Цитата:

Сообщение от Bruteo (Сообщение 142702)
Возможно, дело в использовании режима Floating point, который не на всех телефонах даёт правильные результаты при расчётах.

Проверял только на эмуляторе КЕ.

ViNT 22.03.2010 19:57

Ответ: Математика в МР.
 
Цитата:

Сообщение от impersonalis (Сообщение 142703)
1/5=0
1/5.0 не?

Да, как ни странно, в MP все не как в паскале, и там действительно 1/5=0.
И нафига это сделано, там и так есть div для целочисленого деления.

GRAY_WOLF 25.12.2010 01:11

Ответ: Математика в МР.
 
помогите разобраться с http://forum.boolean.name/showthread.php?t=12895
если вводишь число с запятой, то получается результат "0"...

Banan 25.12.2010 10:58

Ответ: Математика в МР.
 
Цитата:

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

GRAY_WOLF 25.12.2010 14:47

Ответ: Математика в МР.
 
Вот если б я знал как это сделать, то и не задавал такой вопрос. На примере можно пояснить?

Igor 25.12.2010 23:40

Ответ: Математика в МР.
 
var a:real;
...a:=1;
a:=a/5; вроде должно работать.
И ещё косяк - если создать, например, константу pi=3.1415 то в результате pi может оказаться другим, потому мне приходилось создавать переменную pi, а потом присваивать это значение.

cherepets 26.12.2010 15:45

Ответ: Математика в МР.
 
У меня с математикой тоже забавный глюк есть и хз как его обойти.
PHP код:

for i:=1 to 10 do
if 
textwidth(names[i])>long then long:=textwidth(names[i]); 

Есть массив имён (10 штук). Надо в переменную long забить самую большую длину имени в пикселях.
Прикол в том, что textwidth(names[i])>long ВСЕГДА ВЕРНО!

Вывожу значения прямо перед проверкой, вижу:
textwidth = 8, long = 15.
Но результат сравнения прежний: (textwidth>long).

Какие есть идеи обхода этой засады?


Часовой пояс GMT +4, время: 05:59.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot