// Evol functions. // Authors: // 4144 // Reid // Description: // Math functions // abs() // returns the absolute value of the passed integer function script abs { .@n = getarg(0); return .@n >= 0 ? .@n : -.@n; } // lognbaselvl({{, }}) // returns BaseLevel * logn (BaseLevel * alpha). function script lognbaselvl { .@alpha = getarg(0, 1); .@min = getarg(1, 1); .@ret = 0; .@pc_level = BaseLevel * .@alpha; while (.@pc_level >>= 1) { ++.@ret; } .@ret *= BaseLevel; if (.@ret <= .@min) { .@ret = .@min; } return .@ret; } // log2() // returns the log base 2 of the passed integer, up to 20 (2**20=1.048.576) (round down always) function script log2 { .@v=abs(getarg(0)); .@ok=0; .@i=0; freeloop(true); while (!.@ok) { // exact match if (2**.@i == .@v) { .@ok=1; // inexact match, or limit exceeded } else if (2**.@i >= .@v || .@i > 20) { .@ok=1; .@i-=1; // round down // not yet } else { .@i+=1; } } freeloop(false); return .@i; }