Open In App
Related Articles

Compute average of two numbers without overflow

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

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.


 



Last Updated : 08 Jun, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads