gpt4 book ai didi

java - 双数不太准确

转载 作者:行者123 更新时间:2023-12-02 03:05:01 25 4
gpt4 key购买 nike

我写了一个多项式长除法的方法。它与“好”多项式完美配合。在“好”下,我指的是除法准确的系数。今天,我在尝试除 2*x^3-18*x^2+..../7.00000(很多零)0000028*x^2 + 5*x + ...除2*x^3/7.000...000028*x^2之后,我得到0.285714....53*x。下一步,我们需要将 0.2857....53*x 乘以 7.00000...0000028*x^2 + 5*x + .. 并从中减去被除数多项式 2*x^3-18*x^2+... 并得到度数 = 2 的新多项式。但是由于 double 类型的问题,我实际上得到了多项式2.220....E-16*x^3 - 6*x^2 + ...。我知道在 x^3 附近它实际上为零。我不想发明新的和奇怪的东西,这就是为什么我问如何美丽而正确地解决它。谢谢。

最佳答案

许多除法结果(例如 1/7)无法用 double 或 BigDecimal 精确表示。如果您使用 BigDecimal,则必须选择要保留的数字位数,并处理舍入误差。对于 double,您可以获得更方便的算术,但有效位的数量是固定的。

你有两个选择。

一是处理舍入误差。当结果非常接近零(如此接近以至于可能是由于舍入误差所致)时,请将其视为零。我不知道这是否适用于您的算法。如果您这样做,则可以使用 double 或 BigDecimal。

第二个选项是使用有理数包。在有理数算术中,所有除法结果都可以精确表示。 1/7 仍然是 1/7,而不四舍五入为终止小数或二进制分数。如果您这样做,请搜索“java有理数”(无引号)并决定您最喜欢哪一个。

关于java - 双数不太准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872491/

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