Почему значение Pi остается неизменным после третьей итерации алгоритма Гаусса – Лежандра? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытался написать алгоритм Гаусса – Лежандра в JS. Я нашел алгоритм здесь .

Это код, который я написал:

let ao = 1;
  let bo = 1 / Math.sqrt(2);
  let to = 1 / 4;
  let po = 1;
  let an;
  let bn;
  let tn;
  let pn;
  let pi;
  for (let i = 0; i < 10; i++) {
    an = (ao + bo) / 2;
    bn = Math.sqrt(ao * bo);
    tn = to - po * Math.pow(ao - an, 2);
    pn = 2 * po;
    pi = Math.pow(an + bn, 2) / (4 * tn);
    console.log(pi.toFixed(60));
    ao = an;
    bo = bn;
    to = tn;
    po = pn;
  }

Поскольку я понимаю больше итераций, вы выполняете более точное значение числа pi. Но проблема в том, что после третьей итерации значение pi остается неизменным. Вот первые три значения, которые я получил.

3,140579250522168575088244324433617293834686279296875000000000

3,141592646213542838751209274050779640674591064453125000000000

3,141592653589794004176383168669417500495910644531250000000000

Почему значение Pi остаются неизменными после третьей итерации Гаусса Алгоритм Лежандра?

1 Ответ

1 голос
/ 03 апреля 2020

Ваша третья итерация верна до 15 значащих десятичных цифр. Внутренне Javascript представляет все числа как 64-битные числа с плавающей запятой двойной точности (также известные как double s), которые могут представлять от 15 до 17 значащих десятичных цифр .

Так что я бы сказал, что результат остается прежним, потому что у компьютера просто нет больше точности для работы.

Конвергенция к (почти) максимальной точности компьютера после трех итераций - это здорово! Хорошая работа!

...