javascript - Более точное значение Пи?

Я набираю Math.PI; в консоли Chrome, и это возвращается:

3.141592653589793

Затем я набираю Math.PI - 3.141592653589793;, и возвращается 0.

Есть ли способ получить более точное значение (например, 3.1415926535897932384) Math.PI в Javascript?


person chris97ong    schedule 31.03.2014    source источник
comment
Возможно нет. Вы можете попробовать вычислить число Пи самостоятельно.   -  person Madara's Ghost    schedule 31.03.2014
comment
Вот мегабайт пи, угощайтесь: newton.ex.ac .uk/research/qsystems/collabs/pi/pi6.txt А если серьезно, чего вы пытаетесь добиться, если 15 знаков после запятой недостаточно? Обратите внимание, что ошибки округления в этом масштабе значительны.   -  person Piskvor left the building    schedule 31.03.2014


Ответы (2)


Максимальное количество десятичных знаков в javascript ограничено 15.

Таким образом, вы не можете получить более 15 знаков после запятой.

Но вы можете получить до 20 знаков после запятой, но это не точно

Math.PI.toFixed(20); //3.14159265358979311600

Это даст вам значение PI с 20 знаками после запятой.

Примечание. 20 — это максимум, а 0 — это минимум для toFixed().

Поэтому попытка Math.PI.toFixed(100) вызовет ошибку.

person Amit Joki    schedule 31.03.2014
comment
Да, можно получить 20 знаков после запятой, но 11600 не является частью PI. - person user13500; 31.03.2014
comment
Двойные числа IEEE754 не всегда округляются до 15 знаков после запятой, что вводит в заблуждение. - person Qantas 94 Heavy; 16.05.2014
comment
На самом деле считается, что число 11600 бесконечно часто появляется в круговой диаграмме. Только не в том месте. :) - person ; 02.05.2015

Я не понимаю, зачем вам нужна PI с такой точностью, но вы можете:

a) Рассчитайте PI самостоятельно, используя формулу Лейбница

б) Определите PI самостоятельно (используя эту библиотеку)

var PI = new bigdecimal.BigDecimal("3.141592653589793238462643383279");


Вы можете найти первые 100 000 цифр числа PI здесь если вам это действительно нужно.

person user3368484    schedule 31.03.2014
comment
Вариант (б) у меня не работает: alert (PI == Math.PI); возвращает true, а вы утверждаете, что не должно быть одинаково. - person Jongware; 31.03.2014
comment
Можно сказать var my_pi = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647; и т. д., но конечный результат все равно будет зависеть от максимальной точности плавающих чисел. Обычно alert(my_pi); дает 3.141592653589793. Если нужно больше десятичных знаков, нужно использовать массив. Но опять же, это будет не из Math.PI, как спрашивает OP. - person user13500; 31.03.2014
comment
Это все равно не даст вам более высокой точности. 3141592653589793238462643383279/10 будет соответствовать только 3.141592653589793 из-за ограничения плавающего числа. - person user13500; 31.03.2014
comment
Извините, новичок в этом. Простите меня, если это все еще неправильно: p - person user3368484; 31.03.2014
comment
BigDecimal для Javascript — это реализация на чистом JavaScript неизменяемых десятичных чисел произвольной точности со знаком. - person user3368484; 31.03.2014