当我在堆栈溢出时遇到这个问题时,我已经在网上搜索了大约 45 分钟,试图找到这个问题的解决方案。我几乎开始对其进行赏金,但我决定看看我是否能自己解决这个问题。
我想出了两种可能的解决方案,尽管它们都比我简单得多。
解决方案1:将公式分成两部分,可以存储在变量中,并在需要时相加。比如我正好在写一个计算表面积的公式,形成一个正则表达式,返回了错误的答案:
返回 [(this.base * this.height)/2] + [(this.perimeter * this.slant)/2];
我在 处拆分公式+
并将它们存储在变量中:
var a = (this.base * this.height)/2;
var b = (this.perimeter * this.slant)/2;
return a + b
这个解决方案工作得很好。但是后来我开始认为必须有一个我忽略的更简单的解决方案,这导致我:
解决方案 2:除以 2 与乘以 0.5 (duh!) 相同。就我而言——几乎在任何情况下——除以 2 再乘以 0.5 都会得到相同的答案。然后我的代码如下所示:
返回 [(this.base * this.height) * 0.5] + [(this.perimeter * this.slant) * 0.5];
我对两者都进行了测试,并且两者都有效,但显然解决方案 2 更有效(代码更少)。
我唯一能想象需要使用解决方案 1 的情况是,如果您要除以一个非常长的数字或一个素数(除以 3 比乘以 0.33 得到的结果更准确)。
无论如何,我知道您几个月前发布了这个问题,并且可能想出了一个解决方案或继续前进,但我想我还是会发布这个答案,作为未来任何具有相同想法的问题的参考。
(此外,这是在 JavaScript 中,但我无法想象这么简单的东西在类似的语言中有什么不同)。