Java 如何生成PI数以达到我选择的精度?

Java 如何生成PI数以达到我选择的精度?,java,encryption,pi,Java,Encryption,Pi,我正在做一个基于PI数的基本加密程序。(爪哇语) 但是,当我使用函数Math.PI时,我只得到了3.141592653589793,仅此而已 所以我想知道是否有一种方法,我可以达到300~500位数的圆周率 谢谢实际上,有很多。这是一个让你开始学习算法的地方。 但是,自己计算是昂贵的。您可以下载非常精确的值,以便随时使用,例如:如果您认为您需要大量的数字,那么存储所有数字将是一个问题,您可以使用a来生成数字 一种更高级的算法是数字提取算法;使用其中一个,您不仅可以计算序列,还可以从序列中的任何

我正在做一个基于PI数的基本加密程序。(爪哇语)

但是,当我使用函数Math.PI时,我只得到了3.141592653589793,仅此而已

所以我想知道是否有一种方法,我可以达到300~500位数的圆周率


谢谢

实际上,有很多。这是一个让你开始学习算法的地方。

但是,自己计算是昂贵的。您可以下载非常精确的值,以便随时使用,例如:

如果您认为您需要大量的数字,那么存储所有数字将是一个问题,您可以使用a来生成数字

一种更高级的算法是数字提取算法;使用其中一个,您不仅可以计算序列,还可以从序列中的任何位置计算任意数字


如果您的系统中没有实际的绑定要求您使用Pi进行加密,那么您根本不应该使用Pi。您应该使用一个真正的CSPRNG来生成您的数字流,因为Pi是很难预测的,它可以成为一个好的密码系统。(如果您使用Pi的原因是为了在每一端获得相同的流,请放心,您可以通过使用相同的值在CSPRNG的每一端获得相同的序列。)

您需要自己计算,并使用类似BigDecimal的东西来存储它。请参阅一些可能使用的算法。您能否详细说明如何(以及为什么)使用Pi进行加密?只是将其公开,但无论您使用它做什么,您几乎肯定不应该这样做。使用现有库,如
javax.crypto
进行真正的加密。此外,Pi不是一个很好的熵源。如果您只是在尝试加密,那么仍然应该使用真正的CSPRNG来生成数字。(基本上,不要使用
pi.getNextDigit()
,而是使用
csprngWithPrearrangedSeed.getNextDigit()