我试图通过求和以下数列来制作一个程序来近似e:
e=1 (1 / 1!) (1 / 2!) (1 / 3!) .... (1/i!)
目前,我的代码如下所示:
public static void main(String[] args) {
BigDecimal one = new BigDecimal(1);
BigDecimal e = new BigDecimal(1.0);
BigDecimal divisor = new BigDecimal(1.0);
for (int i = 1; i <= 12; i++) {
divisor = divisor.multiply(new BigDecimal(i));
e = e.add(one.divide(divisor));
System.out.println("e = " + e);
}
}
该程序成功地执行了n的计算(1/n!)
e=2
e=2.5
线程“main”java中出现异常。算术异常:非终止十进制扩展;没有可精确表示的十进制结果。在爪哇。数学大十进制。在ch10处分开(未知来源)。第10章近似值。main(第10章E20章,java:16)
我应该如何使用BigDecimal类为e=1(1/1!)进行求和(1 / 2!) (1 / 3!) .... (1/我!)?
此错误的原因是BigDecimal试图精确计算值,但它无法做到这一点,因为1/3在基数10中永远重复。
要解决这个问题,需要定义精度和舍入模式。例如:
e = e.add( one.divide(divisor, 20, RoundingMode.HALF_UP) );
我们都知道,除以3
会得到一个以十进制表示的数字,这个数字会一直持续下去。
0.5 / 3 = 0.166666666666666666666666666666666666666666666666666666666666666666....
这就像是在BigDecimal
中对内部除法的处理,只是在计算二进制形式的int
s。
您将需要一个不同的重载divide
,它需要使用一个刻度(小数点之外的小数位数)和舍入模式。这告诉BigDecimal
要使用多少位数,以及停止时如何取整。
e = e.add(one.divide(divisor, 20, RoundingMode.HALF_EVEN));
输出的e
的最终估计值:
e = 2.71828182828616856395
这个问题参考了欧拉项目问题5,所以要小心剧透!问题5: 2520是可以被1到10的每个数字除的最小数,没有任何余数。可以被1到20的所有数字整除的最小正数是多少? 我用Ruby编写了以下代码作为问题5的解决方案。 然而,每当我运行脚本时,它都会挂起。请注意,我在1到10范围内的基本情况2520上测试了相同的方法,效果很好。 为什么它适用于更简单的情况,但不适用于更高级的情况?我能做些什么来修复我所
本文向大家介绍欧拉图,包括了欧拉图的使用技巧和注意事项,需要的朋友参考一下 欧拉图-如果存在包含图G的每个边的闭合轨迹,则连通图G称为欧拉图。 欧拉路径-欧拉路径是仅使用图形的每个边缘一次的路径。欧拉路径在不同的顶点处开始和结束。 欧拉电路-欧拉电路是只使用图形的每个边一次的电路。欧拉电路始终在相同的顶点处开始和结束。当且仅当G的所有顶点均具有偶数度时,连通图G是欧拉图,而当且仅当其边缘集可分解为
本文向大家介绍.欧拉公式相关面试题,主要包含被问及.欧拉公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
表示 Euler 的类。 欧拉角描述一个旋转变换,通过指定轴顺序和其各个轴向上的指定旋转角度来旋转一个物体。 代码示例 const a = new THREE.Euler( 0, 1, 1.57, 'XYZ' ); const b = new THREE.Vector3( 1, 0, 1 ); b.applyEuler(a); 构造器(Constructor) Euler( x : Float,
问题 null