Calcule el promedio de dos números sin desbordamiento

Dados dos números, a y b. Calcule el promedio de los dos números.
La bien conocida fórmula (a + b) / 2 puede fallar en el siguiente caso: 
Si, a = b = (2^31) – 1 ; es decir, INT_MAX. 
Ahora, (a+b) causará un desbordamiento y, por lo tanto, la fórmula (a + b) / 2 no funcionará 
A continuación se muestra la implementación: 
 

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>

Producción: 
 

Actual average : 2147483647
Computed average : -1

Complejidad de tiempo: O(1), el código se ejecutará en un tiempo constante.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.
Fórmula mejorada que no causa desbordamiento: 
Promedio = (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2)
A continuación se muestra la implementación:
 

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>

Producción: 
 

Actual average : 2147483647
Computed average : 2147483647

Complejidad de tiempo: O(1), el código se ejecutará en un tiempo constante.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.
Este artículo es una contribución de Rohit Thapliyal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *