gpt4 book ai didi

Java Math.acos() 返回值

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:06 26 4
gpt4 key购买 nike

所以我正在编写一个程序来进行一些计算,但我注意到我没有得到我预期的结果。

我正在使用 Math.acos() 和 Math.sqrt() 函数,当我期望得到零答案时,我得到的答案非常小,几乎为零。

> System.out.println(Math.acos(27441738 / (Math.sqrt(27441738)*Math.sqrt(27441738))));
1.4901161193847656E-8

这通常应该打印出 0.0。我在这里缺少什么吗?

最佳答案

没有通用规则可以缩小涉及浮点运算的表达式中的错误范围。

对于这种特殊情况,您可以使用fraction rationalization大大减少错误:

                                              -------------
x x 1 x 1 √x | x √x |
1 = -------- = --- * --- = --- * --- * --- = | --- * --- |
√x * √x √x √x √x √x √x | √x x |
-------------

评估新表达式(使用bsh):

System.out.println( Math.acos( (27441738 / Math.sqrt(27441738)) * (Math.sqrt(27441738) / 27441738) ) );

打印:

0.0

关于建议阅读的一件事,正如其他人指出的,获取有关 FP 的信息的一个很好的起点是“What Every Computer Scientist Should Know About Floating-Point Arithmetic ”,这是一本详细介绍浮点运算的论文,尽管我更喜欢 Computer Representation of Numbers and Computer Arithmetic ,它更简单且更具教学性,它甚至从一个玩具 fp 系统开始,向您介绍浮点运算的复杂概念。

关于Java Math.acos() 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com