gpt4 book ai didi

ruby - 在对它进行立方根然后重新立方后,我可以保持大量的准确性吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:03 26 4
gpt4 key购买 nike

我正在尝试对一个大数 x 进行计算,并对其求立方根 (j = x**(1/3.0) ) 然后重新立方体 (z = j**3)。 x 应该等于 j,它是在使用像 26 这样的小数字然后四舍五入时,但对于非常大的数字,我在保持准确性方面遇到了问题:

1.9.3-p385 :119 > x = 34567898765434567898765677654125 ** 3
1.9.3-p385 :120 > x = BigDecimal.new(x)
1.9.3-p385 :121 > cube_root = x**(1/3.0)
1.9.3-p385 :122 > recubed = cube_root**3
1.9.3-p385 :123 > recubed == x
=> false
1.9.3-p385 :124 > recubed.to_i
=> 41306551989787317397975170279355443182356154696413548486992943670408047235040641261388609159478
1.9.3-p385 :125 > x.to_i
=> 41306551989788217308443399821163722262582437385123598833127062833015560078766131667297533203125

如果无法得到一个接近的近似值,有没有办法得到一个更准确的近似值,其中更多的最高有效位是相同的?

最佳答案

改变这一行

cube_root = x ** (1 / 3.0)

像这样

cube_root = x ** BigDecimal('0.' + '3' * 100)

或者

cube_root = x ** BigDecimal('1/3'.to_r, 100)

你会看到不同之处。

1.9.3p194 :203 > recubed.to_i
=> 41306551989788217308443399821163722262582437385123598833127062833015560078766131667297533203124
1.9.3p194 :204 > x.to_i
=> 41306551989788217308443399821163722262582437385123598833127062833015560078766131667297533203125

那是因为 1/3.0 是一个非常不准确的东西。

关于ruby - 在对它进行立方根然后重新立方后,我可以保持大量的准确性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18361774/

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