Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Compute average of two numbers without overflow

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Given two numbers, a and b. Compute the average of the two numbers.
The well know formula (a + b) / 2 may fail at the following case : 
If, a = b = (2^31) – 1; i.e. INT_MAX. 
Now, (a+b) will cause overflow and hence formula (a + b) / 2 wont work 
Below is the implementation : 
 

C++




// C++ code to compute average of two numbers
#include <bits/stdc++.h>
using namespace std;
 
// Function to compute average of two numbers
int compute_average(int a, int b)
{
    return (a + b) / 2;
}
 
// Driver code
int main()
{
    // Assigning maximum integer value
    int a = INT_MAX, b = INT_MAX;
 
    // Average of two equal numbers is the same number
    cout << "Actual average : " << INT_MAX << endl;
 
    // Function to get the average of 2 numbers
    cout << "Computed average : " << compute_average(a, b);
 
    return 0;
}


Java




// Java code to compute average of two numbers
 
import java.io.*;
 
class GFG {
     
// Function to compute average of two numbers
static int compute_average(int a, int b)
{
    return (a + b) / 2;
}
 
// Driver code
    public static void main (String[] args) {
 
    // Assigning maximum integer value
    int a = Integer.MAX_VALUE;
    int b = Integer.MAX_VALUE;
 
    // Average of two equal numbers is the same number
    System.out.println("Actual average : " + Integer.MAX_VALUE);
 
    // Function to get the average of 2 numbers
    System.out.println("Computed average : " + compute_average(a, b));
         
         
    }
// This code is contributed by ajit.   
}


Python3




# Python 3 code to compute
# average of two numbers
import sys
from math import floor
 
INT_MAX = 2147483647
 
# Function to compute
# average of two numbers
def compute_average(a, b):
    return floor((a + b) / 2)
 
# Driver code
if __name__ == '__main__':
     
    # Assigning maximum integer value
    a = INT_MAX
    b = -INT_MAX - 1
 
    # Average of two equal numbers
    # is the same number
    print("Actual average : ", INT_MAX)
 
    # Function to get the
    # average of 2 numbers
    print("Computed average : ",
           compute_average(a, b))
 
# This code is contributed by
# Surendra_Gangwar


C#




// C#  code to compute average of two numbers
using System;
 
public class GFG{
         
// Function to compute average of two numbers
static int compute_average(int a, int b)
{
    return (a + b) / 2;
}
 
// Driver code
    static public void Main (){
         
    // Assigning maximum integer value
    int a =int.MaxValue;
    int b = int.MaxValue;
 
    // Average of two equal numbers is the same number
    Console.WriteLine("Actual average : " + int.MaxValue);
 
    // Function to get the average of 2 numbers
    Console.WriteLine("Computed average : " + compute_average(a, b));
    }
//This code is contributed by akt_mit   
}


Javascript




<script>
    // Javascript code to compute average of two numbers
     
    const INT_MAX = 2147483647;
     
    // Function to compute average of two numbers
    function compute_average(a, b)
    {
        return Math.floor((a + b) / 2);
    }
     
    // Assigning maximum integer value
    let a = INT_MAX;
    let b = -INT_MAX-1;
  
    // Average of two equal numbers is the same number
    document.write("Actual average : " + INT_MAX + "</br>");
  
    // Function to get the average of 2 numbers
    document.write("Computed average : " + compute_average(a, b) + "</br>");
     
</script>


Output: 
 

Actual average : 2147483647
Computed average : -1

Time Complexity: O(1), the code will run in a constant time.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Improved Formula that does not cause overflow : 
Average = (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2)
Below is the implementation :
 

C++




// C++ code to compute average of two numbers
#include <bits/stdc++.h>
using namespace std;
 
// Function to compute average of two numbers
int compute_average(int a, int b)
{
    return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
 
// Driver code
int main()
{
    // Assigning maximum integer value
    int a = INT_MAX, b = INT_MAX;
 
    // Average of two equal numbers is the same number
    cout << "Actual average : " << INT_MAX << endl;
 
    // Function to get the average of 2 numbers
    cout << "Computed average : " << compute_average(a, b);
 
    return 0;
}


Java




// Java code to compute
// average of two numbers
import java.io.*;
 
class GFG
{
     
// Function to compute
// average of two numbers
static int compute_average(int a,
                           int b)
{
    return (a / 2) + (b / 2) +
           ((a % 2 + b % 2) / 2);
}
 
// Driver code
public static void main (String[] args)
{
 
// Assigning maximum
// integer value
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
 
// Average of two equal
// numbers is the same number
System.out.println("Actual average : " +
                     Integer.MAX_VALUE);
 
// Function to get the
// average of 2 numbers
System.out.print("Computed average : ");
System.out.println(compute_average(a, b));
}
}
 
// This code is contributed by ajit


Python3




# Python code to compute
# average of two numbers
INT_MAX=2147483647
 
# Function to compute
# average of two numbers
def compute_average(a,b):
 
    return (a // 2) + (b // 2) + ((a % 2 + b % 2) // 2)
 
# Driver code
if __name__ =="__main__":
    # Assigning maximum integer value
    a = INT_MAX
    b = INT_MAX
 
    # Average of two equal
    # numbers is the same number
    print( "Actual average : ",INT_MAX)
 
    # Function to get the
    # average of 2 numbers
    print( "Computed average : ",
            compute_average(a, b))
 
     
# This code is contributed
# Shubham Singh(SHUBHAMSINGH10)


C#




// C# code to compute
// average of two numbers
 
using System;
  
class GFG
{
      
// Function to compute
// average of two numbers
static int compute_average(int a,
                           int b)
{
    return (a / 2) + (b / 2) +
           ((a % 2 + b % 2) / 2);
}
  
// Driver code
public static void Main ()
{
  
// Assigning maximum
// integer value
int a = int.MaxValue;
int b = int.MaxValue;
  
// Average of two equal
// numbers is the same number
Console.Write("Actual average : " +
                     int.MaxValue+"\n");
  
// Function to get the
// average of 2 numbers
Console.Write("Computed average : ");
Console.Write(compute_average(a, b));
}
}


PHP




<?php
// PHP code to compute
// average of two numbers
// Function to compute
// average of two numbers
function compute_average($a,$b)
{
    return ($a / 2) + ($b / 2) +
        (($a % 2 + $b % 2) / 2);
}
 
// Driver code
 
// Assigning maximum
// integer value
$a = 2147483648;
$b = 2147483648;
 
// Average of two equal
// numbers is the same number
$x = 2147483648;
print("Actual average : ".$x);
 
// Function to get the
// average of 2 numbers
print("\nComputed average : ");
print(compute_average($a, $b));
 
// This code is contributed by princiraj1992
?>


Javascript




<script>
 
// javascript code to compute average of two numbers
const INT_MAX = 2147483647;
 
 
// Function to compute average of two numbers
function compute_average( a,  b)
{
    return parseInt(a / 2) + parseInt(b / 2) + ((a % 2 + b % 2) / 2);
}
 
 
// Driver code
 
    // Assigning maximum integer value
    let a = INT_MAX, b = INT_MAX;
 
    // Average of two equal numbers is the same number
    document.write( "Actual average : " + INT_MAX +"<br/>");
 
    // Function to get the average of 2 numbers
   document.write( "Computed average : " + compute_average(a, b));
     
 
// This code is contributed by todaysgaurav
 
</script>


Output: 
 

Actual average : 2147483647
Computed average : 2147483647

Time Complexity: O(1), the code will run in a constant time.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
This article is contributed by Rohit Thapliyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 


My Personal Notes arrow_drop_up
Last Updated : 08 Jun, 2022
Like Article
Save Article
Similar Reads
Related Tutorials