gpt4 book ai didi

scheme - 科学记数法转换 - 方案

转载 作者:行者123 更新时间:2023-12-04 17:51:09 24 4
gpt4 key购买 nike

我正在尝试对两个非常大的数字进行简单的减法运算。

(- 1.8305286640724363e+023 (floor 1.8305286640724363e+023))

当我这样做时,我得到的结果是 0.0。我期待输出:
(- 1.8305286640724363e+023 (floor 1.8305286640724363e+023)) => .2439521

扩展的科学记数法会给我这个答案。

183052866407243622723319.24395251 - 183052866407243622723319.00 = .2439521

我想按原样表示这些数字,使用十进制数字,而不是科学记数法,这样我就可以达到预期的结果。有没有办法在 Scheme 中做到这一点?任何帮助、指导或引用将不胜感激:)

我正在将 DrRacket 用于 Windows 64 位和 R5RS 语言。

编辑

我想我会尽可能具体地说明我正在执行的算术示例。

算术:
(* 271979577247970257395 0.6180339887) => 1.6809262297150285e+020

在计算器中进行同样的乘法时,结果 yields => 168092622971502827156.7975214365

当尝试使用精确或不精确时,我得到了这个:
(exact (* 271979577247970257395 0.6180339887)) => exact: undefined;
(inexact (* 271979577247970257395 0.6180339887)) => inexact: undefined;

我想 R5RS 不支持精确/不精确?我查了一下,例子显示使用不精确->精确过程,所以我做了并得到了这个:
(inexact->exact (* 271979577247970257395 0.6180339887)) => 168092622971502854144

只是为了特殊性,我做了相反的事情:
(exact->inexact (* 271979577247970257395 0.6180339887)) => 1.6809262297150285e+020

然后我尝试使用 Big Float 作为某人提到的:
(bf-precision 128)
(bf (* 271979577247970257395 0.6180339887)) => (bf 168092622971502854144)

给我同样的输出。我只想保存从计算器中得到的数字,这似乎是一项非常艰巨的任务!对不起,我可能因为没有得到这个而听起来很愚蠢,但请记住,我是 SCHEME 的极端业余爱好者。再次感谢你的帮助! :)

最佳答案

当然,有了 Scheme,你就有了确切的数字:

(define x (+ (exact 183052866407243622723319) (exact .24395251)))
(define y (+ (exact 183052866407243622723319) (exact .0)))

我分了 x以避免让 Scheme 读取器截断该值。然后:
> x
3297587283763054256749149618043779713285/18014398509481984
> (- x y)
4394657732528389/18014398509481984
> (inexact (- x y))
0.24395251

[编辑] 您需要在整个计算过程中使用精确的数字。这意味着将您的输入转换为精确的,然后最后将您的输出转换为不精确的(如果需要)。

至于你在 #e(* 27... 0.6...)的尝试- 这行不通,因为 #e适用于数字,而不是表达式。使用 (* #e27... #e0.6...) .
> (* #e271979577247970257395 #e0.6180339887)
336185245943005654313595042873/2000000000

关于scheme - 科学记数法转换 - 方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16009143/

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