我能做些什么?
不幸的是,根本问题没有:在您的平台中,1.414 没有精确的双重表示。您无法使用“1.414”运行计算,因为您无法将“1.414”放置在 double
.
参见例如http://www3.ntu.edu.sg/home/ehchua/programming/java/DataRepresentation.html。
您可以做的是以最大精度保持您的数字,并以降低的精度显示它。您需要计算机器精度并在计算过程中跟踪错误。
因此,您将使用 1.413999999999997 并最终得到答案,例如 41.99999137;您将与它一起显示
printf("The answer is %.3f\n", theAnswer);
或者您可以更改平台(编译器、数学库或浮点表示,例如long double
在支持的情况下使用),但请记住,您可以以错误的 1.873 为代价获得 1.414(将其设为 1.87299999999 或 1.87300000001) , 计算会有或多或少相同的误差。
您可以使用整数算术,将初始数字乘以 1,000,000(得到 1414000)或其他合适的比例,然后在最后除。不过,整数有一个最大界限。
还有一些任意精度库使用不同的内部表示,并允许您以您想要的方式指定精度,例如 GMP ( http://gmplib.org/ )。当然,使用它比指定更困难
op1 = 6.0;
op2 = 7.0;
theAnswer = op1 * op2;
并且处理速度也较慢,但结果很好 - 或者与您告诉他们的一样好。