gpt4 book ai didi

math - ( Racket /计划)减法产生的结果非常小

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

我目前正在使用“How To Design Programs”——使用 Scheme/Racket;我在 Scheme 的 R5RS 版本中遇到了一个非常奇特的功能。

在进行简单的减法时,尽管使用的是小数点精度的值,但答案与预期有细微差别。

例如;给定以下减法运算:

(- 5.00 4.90)
=> 0.09999999999999965

什么时候应该期待干净的 0.10?整数减法按预期工作;

> (- 5 4)
=> 1
> (- 5 4.9)
=> 0.09999999999999965

例如,练习 3.1.1:

The next step is to make up examples for each of the functions. Determine how many attendees can afford a show at a ticket price of $3.00, $4.00, and $5.00. Use the examples to formulate a general rule that shows how to compute the number of attendees from the ticket price. Make up more examples if needed.

示例中的规则是,票价每减去 0.10 美元,就会有 15 多人参加。所以像这样的快速功能会起作用..

(define (attendees ticket-price)
(+ 120 (* (/ (- 5.00 ticket-price) 0.10) 15)))

但是,这会返回(相当烦人)..

> (attendance 4.90)
=> 134.99999999999994

所以在尝试了教科书上的(几乎相同的)解决方案之后..

(define (attendance price)
(+ (* (/ 15 .10) (- 5.00 price))
120))

我得到了完全相同的错误。这是我的本地系统特有的吗?我很好奇——实际上我可以简单地使用某种形式的舍入来纠正这个问题;但我宁愿先知道它为什么会发生!

除此之外,我建议任何对 Lisp 感兴趣的人看看 HTDP。略读它似乎是一篇相当温和的文字,非常亲手操作。我确实喜欢 SICP - 但那更像是一个长期的事情;我似乎花了好几天时间阅读,然后练习,然后 catch 在线讲座。 HTDP 似乎更像是“哦,我有 15 分钟的空闲时间 - 我会看看 HTDP”。

最佳答案

float 并不总是按照您期望的精确值存储。参见例如The Perils of Floating Point .

如果您想要精确计算,您可以在您的情况下使用整数运算,将值存储为美分而不是美元。

(define (attendees ticket-price-cents)
(+ 12000 (* (/ (- 500 ticket-price-cents) 10) 1500)))

关于math - ( Racket /计划)减法产生的结果非常小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13693041/

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