logarithmic_root_in_two_variables.pl 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 05 July 2017
  4. # https://github.com/trizen
  5. # An interesting function: logarithmic root in two variables.
  6. # For certain values of x, it has the following identity:
  7. # lgrt2(x, x) = lgrt(x)
  8. # such that:
  9. # exp(log(lgrt(x)) * lgrt(x)) = x
  10. use 5.010;
  11. use strict;
  12. use warnings;
  13. use Math::AnyNum qw(:overload pi e EulerGamma);
  14. sub lgrt2 {
  15. my ($n, $k) = @_;
  16. my $f = log($n);
  17. my $d = log($k);
  18. my $r = sqrt($f * $d);
  19. for (1 .. 200) {
  20. my $x = exp($f / $r);
  21. my $y = $d / log($x);
  22. $r = sqrt($x * $y);
  23. }
  24. return $r;
  25. }
  26. say lgrt2(pi, e); # 1.70771856994915347630915983730048900477178427941
  27. say lgrt2(e, pi); # 1.92464943796370515962751401131903762619866583525
  28. say lgrt2(exp(EulerGamma), e); # 2.24133450569957655907533525796185668012280055007
  29. say lgrt2(e, exp(EulerGamma)); # 1.26917997775582192005119311046938840265836794516
  30. say lgrt2(exp(EulerGamma), pi); # 2.49858594291645763243658930518886102264912661091
  31. say lgrt2(pi, exp(EulerGamma)); # 1.25519152681721226553799617023948749426608115087
  32. say lgrt2(100, 100); # 3.59728502354041750549765225178228606913554305489
  33. say lgrt2(i, -1); # 2.32604988653472423641885139636547364864085030537+1.30957380904696411943253549742370685112065954665i
  34. say lgrt2(-1, i); # 1.10679171296146730411561900792354747210041425159+1.55699997420064988554089005455614440858763281837i