Compute average of two numbers without overflow
Last Updated :
18 Apr, 2024
Given two numbers A and B, such that 0 <= A <= B <= (231 - 1). Compute the average ((A + B) / 2) of the two numbers.
Examples:
Input: A = 1000000000, B = 2000000000
Output: 1500000000.000000
Explanation: (A + B)/2 = (1000000000+ 2000000000)/2 = 1500000000.000000
Input: A = 2000000000, B = 2000000001
Output: 2000000000.500000
Explanation: (A + B)/2 = (2000000000 + 2000000001)/2 = 2000000000.500000
Approach: To solve the problem, follow the below idea:
We know that average of two numbers A and B = (A + B) / 2 but if we try to compute the sum of A and B, it will lead to an overflow. So, we need to apply a different formula to compute the average. Since average of A and B is half of the sum of A and B. We can also compute average as (A/2) + (B/2).
Below is the implementation of the approach:
C++
#include <iostream>
using namespace std;
// Function to compute average of two numbers
double computeAverage(int a, int b) {
return (a / 2.0) + (b / 2.0);
}
// Driver code
int main() {
// Assigning maximum integer value
int a = 2000000000, b = 2000000001;
// Function to get the average of 2 numbers
printf("Average: %.6f", computeAverage(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 double computeAverage(int a, int b)
{
return (a / 2.0) + (b / 2.0);
}
// Driver code
public static void main(String[] args)
{
// Assigning maximum integer value
int a = 2000000000, b = 2000000001;
// Function to get the average of 2 numbers
System.out.printf("Average: %.6f", computeAverage(a, b));
}
}
Python
# Function to compute average of two numbers
def compute_average(a, b):
return (a / 2.0) + (b / 2.0)
# Assigning maximum integer value
a, b = 2000000000, 2000000001
# Function to get the average of 2 numbers
print("Average: {:.6f}".format(compute_average(a, b)))
C#
using System;
class Program
{
// Function to compute average of two numbers
static double ComputeAverage(int a, int b)
{
return (a / 2.0) + (b / 2.0);
}
// Driver code
static void Main()
{
// Assigning maximum integer value
int a = 2000000000, b = 2000000001;
// Function to get the average of 2 numbers
Console.WriteLine("Average: {0:F6}", ComputeAverage(a, b));
}
}
JavaScript
// Function to compute average of two numbers
function computeAverage(a, b) {
// Using floating-point division to ensure accurate average
return (a / 2.0) + (b / 2.0);
}
// Main function
function main() {
// Assigning maximum integer value
const a = 2000000000, b = 2000000001;
// Call the computeAverage function to get the average of two numbers
console.log("Average:", computeAverage(a, b).toFixed(6));
}
// Call the main function to execute the program
main();
OutputAverage: 2000000000.500000
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.
Approach 2:
We can also calculate the average of two numbers A and B using the formula: A + (B - A)/2.
Below is the implementation of the approach:
C++
#include <bits/stdc++.h>
using namespace std;
// Function to compute average of two numbers
double compute_average(int a, int b)
{
return a + (b - a) / 2.0;
}
// Driver code
int main()
{
// Assigning maximum integer value
int a = 2000000000, b = 2000000001;
// Function to get the average of 2 numbers
cout << "Average : " << fixed << compute_average(a, b)
<< endl;
return 0;
}
Java
public class ComputeAverage {
// Function to compute average of two numbers
public static double computeAverage(int a, int b) {
return a + (b - a) / 2.0;
}
// Driver code
public static void main(String[] args) {
// Assigning maximum integer value
int a = 2000000000, b = 2000000001;
// Function to get the average of 2 numbers
double avg = computeAverage(a, b);
// Format the output to display the double value without scientific notation
String formattedAvg = String.format("%.2f", avg);
System.out.println("Average : " + formattedAvg);
}
}
// This code is contributed by shivamgupta0987654321
Python
# Function to compute average of two numbers
def compute_average(a, b):
return a + (b - a) / 2.0
# Driver code
def main():
# Assigning maximum integer value
a, b = 2000000000, 2000000001
# Function to get the average of 2 numbers
print("Average : {:.2f}".format(compute_average(a, b)))
# Call the main function
main()
JavaScript
// Function to compute average of two numbers
function computeAverage(a, b) {
return a + (b - a) / 2.0;
}
// Driver code
function main() {
// Assigning maximum integer value
let a = 2000000000, b = 2000000001;
// Function to get the average of 2 numbers
console.log("Average : " + computeAverage(a, b).toFixed(2));
}
// Call the main function
main();
OutputAverage : 2000000000.500000
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.
Similar Reads
Fast average of two numbers without division Given two numbers, find floor of their average without using division. Input : x = 10, y = 12Output : 11Input : x = 10, y = 7Output : 8We take floor of sum.The idea is to use right shift operator, instead of doing (x + y)/2, we do (x + y) >> 1 C++ // C++ program to find average without using /
3 min read
LCM of two large numbers Given two large numbers 'a' and 'b' such that(10^20<=a, b<=10^300). Find the LCM of two large numbers given. Examples: Input: a = 234516789234023485693020129 b = 176892058718950472893785940 Output: 41484157651764614525905399263631111992263435437186260 Input: a = 3659465283091636494047362574940
3 min read
Addition of two numbers without carry You are given two positive numbers n and m. You have to find a simple addition of both numbers but with a given condition that there is not any carry system in this addition. That is no carry is added at higher MSBs.Examples : Input : m = 456, n = 854 Output : 200 Input : m = 456, n = 4 Output : 450
6 min read
Addition of two numbers without propagating Carry Given 2 numbers a and b of same length. The task is to calculate their sum in such a way that when adding two corresponding positions the carry has to be kept with them only instead of propagating to the left.See the below image for reference: Examples: Input: a = 7752 , b = 8834 Output: 151586 Inpu
15 min read
Add two numbers without using arithmetic operators Given two integers a and b, the task is to find the sum of a and b without using + or - operators. Examples: Input: a = 10, b = 30Output: 40Input: a = -1, b = 2Output: 1Approach:The approach is to add two numbers using bitwise operations. Let's first go through some observations: a & b will have
5 min read