This is compmath.m in view mode; [Download] [Up]
// // Mathematical functions useful in computer calculations. // #import "compmath.h" // // log2() // // Return base-2 log of x. // double log2(double x) { return (log(x) / log(2)); } // // pow2() // // Return 2^n. // int pow2(int n) { switch(n) { case 0: return 0x00000001; break; case 1: return 0x00000002; break; case 2: return 0x00000004; break; case 3: return 0x00000008; break; case 4: return 0x00000010; break; case 5: return 0x00000020; break; case 6: return 0x00000040; break; case 7: return 0x00000080; break; case 8: return 0x00000100; break; case 9: return 0x00000200; break; case 10: return 0x00000400; break; case 11: return 0x00000800; break; case 12: return 0x00001000; break; case 13: return 0x00002000; break; case 14: return 0x00004000; break; case 15: return 0x00008000; break; case 16: return 0x00010000; break; case 17: return 0x00020000; break; case 18: return 0x00040000; break; case 19: return 0x00080000; break; case 20: return 0x00100000; break; case 21: return 0x00200000; break; case 22: return 0x00400000; break; case 23: return 0x00800000; break; case 24: return 0x01000000; break; case 25: return 0x02000000; break; case 26: return 0x04000000; break; case 27: return 0x08000000; break; case 28: return 0x10000000; break; case 29: return 0x20000000; break; case 30: return 0x40000000; break; case 31: return 0x80000000; break; } return 0x000000001; } // // ispowerof2() // // Return 0 if n is not a power of 2, otherwise return 1. // int ispowerof2(unsigned int n) { switch(n) { case 0x00000001: case 0x00000002: case 0x00000004: case 0x00000008: case 0x00000010: case 0x00000020: case 0x00000040: case 0x00000080: case 0x00000100: case 0x00000200: case 0x00000400: case 0x00000800: case 0x00001000: case 0x00002000: case 0x00004000: case 0x00008000: case 0x00010000: case 0x00020000: case 0x00040000: case 0x00080000: case 0x00100000: case 0x00200000: case 0x00400000: case 0x00800000: case 0x01000000: case 0x02000000: case 0x04000000: case 0x08000000: case 0x10000000: case 0x20000000: case 0x40000000: case 0x80000000: return 1; break; default: return 0; break; } return 0; } // // bits2long() // // Converts an array of bits to a long. // long bits2long(bit *bits, int numbits) { long temp = 0L; int i; if(numbits < 1) return temp; for(i = (numbits - 1); i >= 0; i--) { // Grab bits, highest-order first. temp << 1; // Shift temp left 1 bit. temp = temp + bits[i]; // Add the current bit. } return temp; } // // bitsequal() // // Returns 1 if all the bits in the arrays are equal, // otherwise returns 0. // int bitsequal(bit *a, bit *b, int numbits) { int i; for(i = 0; i < numbits; i++) { if(a[i] != b[i]) return 0; } return 1; } // // End of file. //
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.