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