【问题标题】:Why wrong answer for this simple calculation in Red language为什么用 Red 语言对这个简单的计算给出错误的答案
【发布时间】:2018-03-05 08:22:49
【问题描述】:

我正在尝试打印简单表达式的正确值:(100 - 55) / (100 - 75) 但总是得到 1.0 而不是 1.8。我试过了:

>> (100 - 55) / (100 - 75)
>> ((100 - 55) / (100 - 75))
>> to-float ((100 - 55) / (100 - 75))
>> probe ((100 - 55) / (100 - 75))
>> print ((100 - 55) / (100 - 75))
>> (divide (subtract 100 55)  (subtract 100 75))

当正确的值显然是 1.8 时,它们都给出 1.0 或简单的 1(我已经检查了多次!)。问题出在哪里?

编辑:输出:

>> (100 - 55) / (100 - 75)
== 1
>> ((100 - 55) / (100 - 75))
== 1
>> to-float ((100 - 55) / (100 - 75))
== 1.0
>> probe ((100 - 55) / (100 - 75))
1
== 1
>> print ((100 - 55) / (100 - 75))
1
>> (divide (subtract 100 55)  (subtract 100 75))
== 1
>> 

Debian 稳定版 Linux 上的红色版本 0.6.3。

【问题讨论】:

  • 您能粘贴控制台的输出和 Red 的版本吗? Rebol 2 中的结果很好。
  • 输出已在上面发布。

标签: rebol arithmetic-expressions red


【解决方案1】:

如果所有值都是整数并且最佳结果可能是浮点数,Red 不会像 Rebol 那样自动从整数转换为浮点数。

你必须在你的计算中引入一个浮点值

>> (100 - 55) / (100 - 75.0)
== 1.8

当然越早越好。

>> (to-float 100) - 55 / (100 - 75)
== 1.8

顺便说一下我喜欢用的方式

divide subtract to-float 100 55 subtract 100 75

你要多写一点,但你把括号省了,你不必考虑优先级

【讨论】:

  • 整数除法(与加法、减法和乘法不同)很可能产生浮点值。为什么会出现这种默认行为?
  • Red 仍在不断发展,到目前为止我对它的体验非常好。感谢大家的帮助。 ——
  • @rnso 数学运算中浮点值的自动强制尚未在 Red 中实现。但是,当不需要时,仍然有一种方法可以避免自动强制。
  • 与大多数编程语言不同,您实际上不必考虑优先级,除了(二进制)运算符的特殊情况
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 2016-09-24
  • 1970-01-01
  • 2020-08-21
  • 2017-04-29
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多