http://upload.wikime...a968fa523f5.png

CODE |

// macht = power int macht_i(int a, unsigned int b) { int i, resultaat = a; if (b > 1) { for (i = 1; i < b; i++) { resultaat *= a; } return resultaat; } else { switch (b) { case 0: return 1; case 1: return a; } } } double macht_d(double a, int b) { int i; double resultaat = a; if (b < 1) { b *= -1; for (i = 1; i < b; i++) { resultaat *= a; } return (1/resultaat); } else if (b > 1) { for (i = 1; i < b; i++) { resultaat *= a; } return resultaat; } else { switch (b) { case -1: return (1/a); case 0: return 1; case 1: return a; } } } double ln(double x) { int i, bufferI; double bufferDI, bufferD, resultaat = 0.0; // Eigenlijk moet dit oneindig vaak herhaald worden, maar bij 1000 keer heb je het wel redelijk precies. for (i = 1; i < 5000; i++) { // (-1)^n+1 bufferI = -1; bufferI = macht_i(bufferI, (i+1)); bufferDI = bufferI; // ((-1)^n+1)/n bufferDI /= i; // (x-1)^n bufferD = (x-1); bufferD = macht_d(bufferD, i); // Vermenigvuldigen en optellen (of aftrekken) bufferD *= bufferDI; resultaat += bufferD; } return resultaat; } |

EDIT: Solved, the function I used was only working for -1<x<1. I fixed it using ln(x) = -ln(1/x).