Search code examples
c++algorithmvisual-c++logarithm

write a logarithmic function in c++


I want to write a function to calculate the logarithm of a number to any base in c++
this function should be able to calculate the logarithm of any numbers in any base

#include <bits/stdc++.h>

using namespace std;

int main()

{
    int number,base;
    int i=0;//this is the counter
    double value=0; //the value of the power 
    cout<<"enter the number : "<<endl;
    cin>>number;
    cout<<"enter the base : "<<endl;
    cin>>base;
    while (value<number){//if the value of the power <the number the loop will be continue 
         value=pow(base,i);
         if (value==number) //this if statment to check if the result is correct or not
         {
            break;
         }i+=1;
 }cout<<"the result is :  "<<i<<endl;//print the result on the screen

 return 0;
}

Solution

  • 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