# Geometric mean (Two Methods)

• Difficulty Level : Easy
• Last Updated : 18 Sep, 2022

Given an array of n elements, we need to find the geometric mean of the numbers. Generally geometric mean of n numbers is the nth root of their product.

If there are n elements x1, x2, x3, . . ., xn
in an array and if we want to calculate the
geometric mean of the array elements is
Geometric mean = (x1 * x2 * x3 * . . . * xn)1/n

Examples:

Input : arr[] = {1, 2, 3, 4, 5, 6, 7, 8}
Output : 3.76435
= (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8)1/8
= 403201/8
= 3.76435

Input : arr[] = {15, 12, 13, 19, 10}
Output : 13.447
= (15 * 12 * 13 * 19 * 10)1/5
= 4446001/5
= 13.477

A simple solution is to multiply all numbers first, then find (1/n)-th power of the multiplication.

## C++

 // Program to calculate the geometric mean // of the given array elements. #include using namespace std;   // function to calculate geometric mean // and return float value. float geometricMean(int arr[], int n) {     // declare product variable and     // initialize it to 1.     float product = 1;       // Compute the product of all the     // elements in the array.     for (int i = 0; i < n; i++)         product = product * arr[i];       // compute geometric mean through formula     // pow(product, 1/n) and return the value     // to main function.     float gm = pow(product, (float)1 / n);     return gm; }   // Driver function int main() {     int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };     int n = sizeof(arr) / sizeof(arr[0]);     cout << geometricMean(arr, n);     return 0; }

## Java

 // Program to calculate the geometric mean // of the given array elements. import java.math.*;   class GFG{           // function to calculate geometric mean     // and return float value.     static float geometricMean(int arr[], int n)     {         // declare product variable and         // initialize it to 1.         float product = 1;           // Compute the product of all the         // elements in the array.         for (int i = 0; i < n; i++)             product = product * arr[i];           // compute geometric mean through         // formula pow(product, 1/n) and         // return the value to main function.         float gm = (float)Math.pow(product, (float)1 / n);         return gm;     }       // Driver function     public static void main(String args[])     {         int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };         int n = arr.length ;         System.out.println(geometricMean(arr, n));     } }   /*This code is contributed by Nikita Tiwari*/

## Python

 # Python Program to calculate the # geometric mean of the given # array elements. import math   # function to calculate geometric # mean and return float value. def geometricMean(arr, n) :           # declare product variable and     # initialize it to 1.     product = 1           # Compute the product of all the     # elements in the array.     for i in range(0,n) :         product = product * arr[i]        # compute geometric mean through     # formula pow(product, 1/n) and     # return the value to main function.     gm = (float)(math.pow(product, (1 / n)))     return (float)(gm)             # Driver function arr = [ 1, 2, 3, 4, 5, 6, 7, 8] n = len(arr)   # to print 6 digits after decimal print ('{0:.6f}'.format(geometricMean(arr, n)))      # This code is contributed by Nikita Tiwari

## C#

 // Program to calculate the geometric mean // of the given array elements. using System;   class GFG{           // function to calculate geometric mean     // and return float value.     static float geometricMean(int []arr, int n)     {         // declare product variable and         // initialize it to 1.         float product = 1;           // Compute the product of all the         // elements in the array.         for (int i = 0; i < n; i++)             product = product * arr[i];           // compute geometric mean through         // formula pow(product, 1/n) and         // return the value to main function.         float gm = (float)Math.Pow(product, (float)1 / n);         return gm;     }       // Driver function     public static void Main()     {         int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };         int n = arr.Length ;         Console.WriteLine(geometricMean(arr, n));     } }   /*This code is contributed by vt_m*/



## Javascript



Output:

3.76435

Time Complexity: O(n) where n is size of given array

Auxiliary Space: O(1)

The above solution simply causes overflow. A better solution is to use log. There are n numbers and we need to calculate geometric mean using the formula :

Geometric mean = Antilog((log(x1) + log(x2) +
log(x3) + . . . + log(xn))/n)

## C++

 // Program to calculate the geometric mean // of the given array elements. #include using namespace std;   // function to calculate geometric mean // and return float value. float geometricMean(int arr[], int n) {     // declare sum variable and     // initialize it to 1.     float sum = 0;       // Compute the sum of all the     // elements in the array.     for (int i = 0; i < n; i++)         sum = sum + log(arr[i]);       // compute geometric mean through formula     // antilog(((log(1) + log(2) + . . . + log(n))/n)     // and return the value to main function.     sum = sum / n;       return exp(sum); }   // Driver function int main() {     int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };     int n = sizeof(arr) / sizeof(arr[0]);     // function call     cout << geometricMean(arr, n);     return 0; }

## Java

 // Java Program to calculate the geometric mean // of the given array elements. import java.io.*;   class GFG {           // function to calculate geometric mean     // and return float value.     static float geometricMean(int []arr, int n)     {         // declare sum variable and         // initialize it to 1.         float sum = 0;               // Compute the sum of all the         // elements in the array.         for (int i = 0; i < n; i++)             sum = sum + (float)Math.log(arr[i]);               // compute geometric mean through formula         // antilog(((log(1) + log(2) + . . . + log(n))/n)         // and return the value to main function.         sum = sum / n;               return (float)Math.exp(sum);     }           // Driver function     public static void main (String[] args)     {         int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };         int n = arr.length;                   // function call         System.out.println(geometricMean(arr, n));           } }   // This code is contributed by vt_m.

## Python3

 # Program to calculate the # geometric mean of the # given array elements. import math   # function to calculate # geometric mean and # return float value. def geometricMean(arr, n):           # declare sum variable and     # initialize it to 1.     sum = 0;           # Compute the sum of all     # the elements in the array.     for i in range(n):         sum = sum + math.log(arr[i]);           # compute geometric mean     # through formula antilog     # (((log(1) + log(2) + . .     # ... + log(n))/n)     # and return the value to     # main function.     sum = sum / n;           return math.exp(sum);   # Driver Code arr= [ 1, 2, 3, 4, 5, 6, 7, 8 ]; n = len(arr);   # function call print(geometricMean(arr, n));   # This code is contributed by mits.

## C#

 // Program to calculate the geometric mean // of the given array elements. using System;   class GFG {       // function to calculate geometric mean     // and return float value.     static float geometricMean(int []arr, int n)     {         // declare sum variable and         // initialize it to 1.         float sum = 0;               // Compute the sum of all the         // elements in the array.         for (int i = 0; i < n; i++)             sum = sum + (float)Math.Log(arr[i]);               // compute geometric mean through formula         // antilog(((log(1) + log(2) + . . . + log(n))/n)         // and return the value to main function.         sum = sum / n;               return (float)Math.Exp(sum);     }           // Driver function     public static void Main ()     {         int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };         int n = arr.Length;                   // function call         Console.WriteLine(geometricMean(arr, n));           } }   // This code is contributed by vt_m.



## Javascript



Output:

3.76435

Time Complexity: O(n)

Auxiliary Space: O(1)
This article is contributed by Dharmendra Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.