Author Topic: Как взять натуральный логарифм b=ln(x) средствами кликера.  (Read 1287 times)

0 Members and 1 Guest are viewing this topic.

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Переписываю бота на мышиное управление. Для пересчета геодаты игры в экранные координаты мыши требуется взять натуральный логарифм. Как посчитать средствами кликера?

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Если идей как взять логарифм нет, придется считать через кубическую регрессию. У нее до 1000 условных единиц геодаты погрешность меньше.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
я даже представить не могу зачем тебе это, и что значит "пересчет геодаты игры в экранные координаты мыши"  :-\ .

Методы вычисления натурального логарифма есть в википедии.

вот один из них
Code: (clickermann) [Select]
SUB(ln_x, $ln)   
   $n_ln = 1
   FOR($i_ln=2,$i_ln<500,2)
      $n_ln = $n_ln + ((1/($i_ln+1))*pow(($ln-1)/($ln+1),$i_ln))
   END_CYC     
   $ln_x = 2*(($ln-1)/($ln+1))*$n_ln   
END_SUB
//-------------------------------------

//пример

ln_x(6)   //  натуральный логарифм шести

print($ln_x)  //  1.79175946926  - результат немного разнится в разных версиях кликермана

halt



FOR($i_ln=2,$i_ln<500,2) - число "500"  это  точность расчетов, чем больше тем точнее, но медленнее. если нужна скорость расчетов, то можно уменьшить.
« Last Edit: February 18, 2018, 04:35:37 PM by dramster »

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Большое спасибо.

PS Игра 3D, вид от 3-го лица. Есть текущие координаты геодаты перса, камеры в игре и контрольной точки. Есть расчет угла поворота и дальность до контрольной точки в координатах геодаты. По экспериментальным данным на сайте planetcalc.ru/5992/ построена логарифмическая функция зависимости дистанции в геодате от координат по оси Y куда кликнул мышкой на экране.

PS2   FOR($i_ln=2,$i_ln<3000,2)   ->  при  ln 1000 дает точность до 3 знака после запятой - то что надо.


 
« Last Edit: February 18, 2018, 06:21:12 PM by ya12 »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
чем ближе значение Х к единице, тем точнее вычисления. но можно использовать тождества логарифмов для более точных расчетов. алгоритм написанный мной выше рассчитывает более менее точно числа в интервале от 0.001 до 100. если чиcла за пределами, то не беда. вот два примера с расчетом 1234 и 0.000321

Code: (clickermann) [Select]
SUB(ln_x, $ln)   
   $n_ln = 1
   FOR($i_ln=2,$i_ln<500,2)
      $n_ln = $n_ln + ((1/($i_ln+1))*pow(($ln-1)/($ln+1),$i_ln))
   END_CYC     
   $ln_x = 2*(($ln-1)/($ln+1))*$n_ln   
END_SUB
//-------------------------------------
 
//примеры

 
//ln_x(1234) = ln_x(1.234*pow(10,3)) = ln_x(1.234)+ln_x(pow(10,3)) = ln_x(1.234)+3*ln_x(10) 

ln_x(1.234)
$ln_x1 = $ln_x

ln_x(10)
$ln_x2 = $ln_x
 
print($ln_x1 + 3*$ln_x2) //нат. логарифм 1234 = 7.11801620448

//--------------

//ln_x(0,000321) = ln_x(3.21*pow(10,-4)) = ln_x(3.21)+ln_x(pow(10,-4)) = ln_x(3.21)-4*ln_x(10) 

ln_x(3.21)
$ln_x1 = $ln_x

ln_x(10)
$ln_x2 = $ln_x

print($ln_x1 - 4*$ln_x2) //нат. логарифм 0,000321 = -8.04406943487
 
halt

информация с вики  https://ru.wikipedia.org/wiki/Натуральный_логарифм