# Geometric mean (Two Methods)

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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); ` `    ``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*/`

## PHP

 ` `

Output:

```3.76435
```

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); ` `    ``// 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.  `

## PHP

 ` `

Output:

```3.76435
```

This article is contributed by Dharmendra Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Improved By : jit_t, vt_m, Mithun Kumar

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.