docs: FastMath

This commit is contained in:
Hannes Janetzek 2014-02-07 15:59:14 +01:00
parent ebaffdb123
commit e71f866b14

View File

@ -18,43 +18,42 @@ package org.oscim.utils;
public class FastMath { public class FastMath {
/** /**
* from http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog * Integer version of log2(x)
* *
* @param v * from http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
* ...
* @return ...
*/ */
public static int log2(int v) { public static int log2(int x) {
int r = 0; // result of log2(v) will go here int r = 0; // result of log2(v) will go here
if ((v & 0xFFFF0000) != 0) { if ((x & 0xFFFF0000) != 0) {
v >>= 16; x >>= 16;
r |= 16; r |= 16;
} }
if ((v & 0xFF00) != 0) { if ((x & 0xFF00) != 0) {
v >>= 8; x >>= 8;
r |= 8; r |= 8;
} }
if ((v & 0xF0) != 0) { if ((x & 0xF0) != 0) {
v >>= 4; x >>= 4;
r |= 4; r |= 4;
} }
if ((v & 0xC) != 0) { if ((x & 0xC) != 0) {
v >>= 2; x >>= 2;
r |= 2; r |= 2;
} }
if ((v & 0x2) != 0) { if ((x & 0x2) != 0) {
r |= 1; r |= 1;
} }
return r; return r;
} }
public static float pow(int pow) { /** Integer version of 2^x */
if (pow == 0) public static float pow(int x) {
if (x == 0)
return 1; return 1;
return (pow > 0 ? (1 << pow) : (1.0f / (1 << -pow))); return (x > 0 ? (1 << x) : (1.0f / (1 << -x)));
} }
public static int clamp(int value, int min, int max) { public static int clamp(int value, int min, int max) {
@ -87,12 +86,12 @@ public class FastMath {
return a2 < a1 ? a1 : a2; return a2 < a1 ? a1 : a2;
} }
// test if any absolute value is greater than 'cmp' /** test if any absolute value is greater than 'cmp' */
public static boolean absMaxCmp(float value1, float value2, float cmp) { public static boolean absMaxCmp(float value1, float value2, float cmp) {
return value1 < -cmp || value1 > cmp || value2 < -cmp || value2 > cmp; return value1 < -cmp || value1 > cmp || value2 < -cmp || value2 > cmp;
} }
// test if any absolute value is greater than 'cmp' /** test if any absolute value is greater than 'cmp' */
public static boolean absMaxCmp(int value1, int value2, int cmp) { public static boolean absMaxCmp(int value1, int value2, int cmp) {
return value1 < -cmp || value1 > cmp || value2 < -cmp || value2 > cmp; return value1 < -cmp || value1 > cmp || value2 < -cmp || value2 > cmp;
} }