--- id: 5a23c84252665b21eecc7e03 title: 累積標準偏差 challengeType: 5 forumTopicId: 302240 dashedName: cumulative-standard-deviation --- # --description-- 数値の配列をパラメータとして取り、級数の [標準偏差](https://en.wikipedia.org/wiki/Standard_deviation) を返す関数を作成します。 # --hints-- `standardDeviation` という関数です。 ```js assert(typeof standardDeviation == 'function'); ``` `standardDeviation([2, 4, 4, 4, 5, 5, 7, 9])` は数字を返します。 ```js assert(typeof standardDeviation([2, 4, 4, 4, 5, 5, 7, 9]) == 'number'); ``` `standardDeviation([2, 4, 4, 4, 5, 5, 7, 9])` は `2` を返します。 ```js assert.equal(standardDeviation([2, 4, 4, 4, 5, 5, 7, 9]), 2); ``` `standardDeviation([600, 470, 170, 430, 300])` は `147.323` を返します。 ```js assert.equal(standardDeviation([600, 470, 170, 430, 300]), 147.323); ``` `standardDeviation([75, 83, 96, 100, 121, 125])` は `18.239` を返します。 ```js assert.equal(standardDeviation([75, 83, 96, 100, 121, 125]), 18.239); ``` `standardDeviation([23, 37, 45, 49, 56, 63, 63, 70, 72, 82])` は `16.87` を返します。 ```js assert.equal( standardDeviation([23, 37, 45, 49, 56, 63, 63, 70, 72, 82]), 16.87 ); ``` `standardDeviation([271, 354, 296, 301, 333, 326, 285, 298, 327, 316, 287, 314])` は `22.631` を返します。 ```js assert.equal( standardDeviation([ 271, 354, 296, 301, 333, 326, 285, 298, 327, 316, 287, 314 ]), 22.631 ); ``` # --seed-- ## --seed-contents-- ```js function standardDeviation(arr) { } ``` # --solutions-- ```js function standardDeviation(arr) { var sum = 0, sum_sq = 0, n = arr.length; arr.forEach(function(e) { sum += e; sum_sq += e * e; }); var std_dev = Math.sqrt(sum_sq / n - Math.pow(sum / n, 2)); return Math.round(std_dev * 1000) / 1000; } ```