# Geometric mean (Two Methods)

• Difficulty Level : Easy
• Last Updated : 06 May, 2021

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

 ``

## Javascript

 `    `

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

 ``

## Javascript

 ``

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 write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.