If you want to write the logarithm function without using the std libs,the simplest way is useing Binary logarithm
// function to evaluate Binary logarithm
uint16_t log2(uint32_t n) {
if (n == 0) //throw ...
{
//Here we have error
//you can use exception to handle this error or return Zero
throw new exception(std::out_of_range("fault we don't have log2 0"));
}
uint16_t logValue = -1;
while (n) {//
logValue++;
n >>= 1;
}
return logValue;
}
log2 function calculate Binary logarithm in O(log n) complexity,
and use this formula to calculate other logarithms.
logb a = logc a / logc b
And here function you want (calculate any base logarithms):
// function to evaluate logarithm a base-b
uint32_t log(uint32_t a, uint32_t b)
{
return log2(a) / log2(b);
}
CPP main function for testing
#include <math.h>
#include <iostream>
using namespace std;
// driver program to test the above function
int main()
{
uint32_t a, b;
a = 625;
b = 5;
cout << "The logarithm value(base-" << b <<") of " << a
<< " is " << log(a,b) << endl;
a = 1000;
b = 10;
cout << "The logarithm value(base-" << b << ") of " << a
<< " is " << log(a, b) << endl;
a = 243;
b = 3;
cout << "The logarithm value(base-" << b << ") of " << a
<< " is " << log(a, b) << endl;
return 0;
}
Output:
The logarithm value(base-5) of 625 is 4
The logarithm value(base-10) of 1000 is 3
The logarithm value(base-3) of 243 is 7
In math.h
:
Syntax for returning natural logarithm:
result = log(x)
Syntax for returning logarithm (base-10 logarithm) of the argument.
result = log10(x)
The parameters can be of any data-type like int, double or float or long double.
Log() function returns value according to the following conditions:
a) if x>1 then positive
b) if 0<x<1 returns a negative value
c) if x=1 then it returns 0
d) if x=0 then it returns -inf
e) if x<0 then it returns NaN(not a number)
CPP program to implement log() function
#include <math.h>
#include <iostream>
using namespace std;
// function to evaluate natural logarithm base-e
double valueE(double d)
{
return log(d);
}
// function to evaluate logarithm base-10
double value10(double d)
{
return log10(d);
}
// driver program to test the above function
int main()
{
double d = 10;
cout << "The logarithm value(base-e) of " << d
<< " is " << valueE(d) << endl;
cout << "The logarithm value(base-10) of " << d
<< " is " << value10(d) << endl;
return 0;
}
Output:
The logarithm value(base-e) of 10 is 2.30259
The logarithm value(base-10) of 10 is 1