java for-loop问题
发布时间:2020-12-15 02:01:23 所属栏目:Java 来源:网络整理
导读:我正在制作一个 Java程序来计算Simpson的积分规则.这是我的代码.注意count == 4,9,10,11的输出值中的第二列数字.它们不是我需要的数字,它们不遵循这种模式.我需要这些数字是准确的.发生了什么,我该如何解决? public static void main(String[] args) { doub
我正在制作一个
Java程序来计算Simpson的积分规则.这是我的代码.注意count == 4,9,10,11的输出值中的第二列数字.它们不是我需要的数字,它们不遵循这种模式.我需要这些数字是准确的.发生了什么,我该如何解决?
public static void main(String[] args) { double totalS = 0.0; int count = 0; for(double i=0; i< 4; i += 0.4 ) { count++; totalS += Sfunction(i,count); System.out.println(count + " " + i + " " + totalS); } } public static double Sfunction(double f1,int count) { double value; if (f1 == 0.0 || f1 == 4.0) value = Math.cos(Math.sqrt(f1)); else if ((count % 2) == 1) value = 2 * Math.cos(Math.sqrt(f1)); else value = 4 * Math.cos(Math.sqrt(f1)); return value; } 我得到的输出: 1 0.0 1.0 2 0.4 4.226313639540303 3 0.8 5.478244888601832 4 1.2000000000000002 7.30884788480188 5 1.6 7.911122809972827 6 2.0 8.534897589034324 7 2.4 8.578100205110182 8 2.8 8.168723348285942 9 3.1999999999999997 7.736055200662704 10 3.5999999999999996 6.452869366954546 11 3.9999999999999996 5.620575693860261 解决方法
每次绕过循环,你都会在0.4到i的不精确加法中混合错误.
相反,使用循环计数器的整数值,并对其进行缩放以获得更好的近似值: for ( int count = 0; count < 10; ++count ) { final double i = 0.4 * count; System.out.println ( ( count + 1 ) + " " + i ); } 这不会消除浮点错误,但这意味着它不会在每次迭代时增加.要从输出中删除错误,请将输出格式化为合理的小数位数: for ( int count = 0; count < 10; ++count ) { final double i = 0.4 * count; System.out.printf ( "%2d %.1fn",( count + 1 ),i ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |