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
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
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
Largest palindrome which is product of two n-digit numbers Given a value n, find out the largest palindrome number which is product of two n digit numbers. Examples : Input : n = 2 Output : 9009 9009 is the largest number which is product of two 2-digit numbers. 9009 = 91*99. Input : n = 3 Output : 906609Recommended PracticeLargest Product PallindromeTry It
8 min read
Count of carry operations on adding two Binary numbers Given two decimal numbers num1 and num2, the task is to count the number of times carry operation is required while adding the two given numbers in binary form. Examples: Input: num1 = 15, num2 = 10Output: 3Explanation:Give numbers are added as:15 -> 1 1 1 110 -> 1 0 1 0carry -> 1 1 1 - ---
6 min read
Reverse digits of an integer with overflow handled Write a program to reverse an integer assuming that the input is a 32-bit integer. If the reversed integer overflows, print -1 as the output. Let us see a simple approach to reverse digits of an integer. C++// A simple C program to reverse digits of // an integer. #include <bits/stdc++.h> usin
15 min read