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
Find average of two numbers using bit operation Given two integers x and y, the task is to find the average of these numbers i.e. (x + y) / 2 using bit operations. Note that this method will give result as floor value of the calculated average.Examples: Input: x = 2, y = 4 Output: 3 (2 + 4) / 2 = 3Input: x = 10, y = 9 Output: 9 Approach: Average
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
Compute the minimum or maximum of two integers without branching On some rare machines where branching is expensive, the below obvious approach to find minimum can be slow as it uses branching. C++ /* The obvious approach to find minimum (involves branching) */ int min(int x, int y) { return (x < y) ? x : y } //This code is contributed by Shubham Singh Java /*
11 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
To find sum of two numbers without using any operator Write a program to find sum of positive integers without using any operator. Only use of printf() is allowed. No other library function can be used.Solution It's a trick question. We can use printf() to find sum of two numbers as printf() returns the number of characters printed. The width field in
9 min read
Program to find LCM of 2 numbers without using GCD Finding LCM using GCD is explained here but here the task is to find LCM without first calculating GCD.Examples: Input: 7, 5 Output: 35 Input: 2, 6 Output: 6 The approach is to start with the largest of the 2 numbers and keep incrementing the larger number by itself till smaller number perfectly div
4 min read
Multiplication of two numbers with shift operator For any given two numbers n and m, you have to find n*m without using any multiplication operator. Examples : Input: n = 25 , m = 13 Output: 325 Input: n = 50 , m = 16 Output: 800 Method 1We can solve this problem with the shift operator. The idea is based on the fact that every number can be repres
7 min read