Logarithms.

Exide

I am amazingly focused right now!
Reaction score
448
I'm not sure.
Maybe there's another way to achieve what you want, though. What are you trying to do?
 

Larcenist

REP: Respect, Envy, Prosperity?
Reaction score
211
There are no functions in the WE as far as I know that utilizes logarithms, though why would you need it in the first place?
 

Jooster

New Member
Reaction score
7
i believe you are able to "make" your own. blizzard did seat us well with a decent mathematical system. I'm just curious as to how u would implement the logarithm system into.
 

Cookiemaster

New Member
Reaction score
36
I'm making a damage system, but I want to display the damage on the unit relatively. (1 damage = velocity angle 300', 10 velocity angle 0', 100 velocity angle 60', etc.)
 

Jooster

New Member
Reaction score
7
i would of had guess armor or a income system, mostly constants. honestly i dont think u are going to be able to make something like that without a very long complicated code :<
 

AceHart

Your Friendly Neighborhood Admin
Reaction score
1,494
Well, I'd go with this "approximation":

If damage greater than 1000 then
- Set angle =
else if damage greater than 100 then
- Set angle =
else if damage greater than 10 then
- Set angle =
else
- Set angle =

It's not as accurate as an actual log function, but it certainly beats them all when it comes to speed.


Just for the fun of it:
JASS:
function log takes real x returns real
    if x &lt;= 0 then
        return 0.0
    endif
    set x = x - 1.0
    return x / (1 + x / (2 + x / (3 + 4 * x / (4 + 4 * x / (5 + 9 * x / (6 + 9 * x / (7 + 16 * x / (8 + 16 * x  / (9 + 25 * x / (10 + 25 * x / (11 + 36 * x / (12 + 36 * x / (13 + 49 * x / (14 + 49 * x / (15 + 64 * x / (16 + 64 * x / (17 + 81 * x / (18 + 81 * x / (19 + 100 * x / (20 + 100 * x))))))))))))))))))))
endfunction


Not overly precise on large values but "good enough" for most uses. Fast too since it doesn't use any loops... :p
 
Reaction score
456
JASS:
return x / (1 + x / (2 + x / (3 + 4 * x / (4 + 4 * x / (5 + 9 * x / (6 + 9 * x / (7 + 16 * x / (8 + 16 * x  / (9 + 25 * x / (10 + 25 * x / (11 + 36 * x / (12 + 36 * x / (13 + 49 * x / (14 + 49 * x / (15 + 64 * x / (16 + 64 * x / (17 + 81 * x / (18 + 81 * x / (19 + 100 * x / (20 + 100 * x))))))))))))))))))))

That doesn't look too fast with all those divisions and everything.

[DEL]And when x is 1.0, it becomes 0.0 (x = x - 1.0), and then you get divided by 0 error.[/DEL]
(forget it)
 

AceHart

Your Friendly Neighborhood Admin
Reaction score
1,494
Have a look at the others.
See those loops?
See what they do inside?
This does it all in one go, without looping.

The only known problem is the lack of precision on higher values.
Well, that and the general usefulness of a log function...

It's base e by the way.
To get other bases:

Log(b) X = Log(e) X / Log(e) b
I.e. the log of X in base b equals log X divided by log b in some known base.
The divisor can be pre-calculated of course.

Personally, I'd still go with the somewhat rough but foolproof approximation... :p
 

Light Alkmst

New Member
Reaction score
20
If you want, I could use newly learned series stuff (Taylor polynomials) to help find a formula if AceHart's isn't sufficient...would take a good deal of time though...
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top