【问题标题】:Does an algorithm depend on underlying number representation?算法是否依赖于底层数字表示?
【发布时间】:2020-12-15 13:11:32
【问题描述】:

一般的算法会使用变量(例如:max、min 等)来保持逻辑状态,同时解决问题。变量在计算机(硬件)中用数字表示。

计算机被设计成使用二进制数字来表示数字和其他信息。但是,有可能(或已经尝试过)使用不同的数字表示(例如三进制,对于任何可能的优势,都没有关系)。

现在,算法是否依赖于底层计算机的这个数字表示?即在具有数字表示 Nx 的计算机 X 上(而不是“为”)编写的算法是否在具有数字表示 Ny 的计算机 Y 上工作完全相同?

【问题讨论】:

  • "工作完全相同":当然不是,因为记数系统不同。
  • 逻辑上是的——这意味着只要有足够的时间,无论基材如何,算法都会产生相同的输出。然而,不同的系统可能有不同的效率——也许一个在数字上加 1 的速度要快得多……这意味着不同的算法在实时运行时可能更快或更慢,尽管具有相同的 big-O。
  • 嗯,许多金融算法在以 2 为基数时存在问题,而在以 10 为基数表示时效果最佳。

标签: algorithm binary


【解决方案1】:

是的,可用的算法及其属性都取决于表示。

例如How can I speed up the binary GCD algorithm using __builtin_ctz? 询问如何实现一个非常依赖于数字的二进制表示的算法。

其次,有很多细节取决于表示。例如,如果您使用浮点数,您将得到舍入错误,这在金融中可能导致不匹配的便士。相比之下,如果您使用以 10 为底的算术,则不会出现舍入误差。

你不会认为一分钱很重要。但人们对财务模型做的第一件事是“验证它是否存在关联”。而且我看到人们花费数天时间寻找丢失的一角钱。

更新:正如 cmets 中所述,我最初在第一句话中说“否”并表示“是”。所以我切换了它并添加了一个说明。

【讨论】:

  • 感谢您的回复;我了解金融(以及任何此类)应用程序的依赖性,其中准确性取决于数字表示。为了论证,我们可以将算法的所有这些属性(依赖于数字表示)捆绑到一个逻辑模块(比如共享库)中,然后根据精度要求使用它们。我需要知道的是(正如 arbuthnott 在问题下方评论的那样),如果我们不关心速度(以及预期的准确性问题),那么应该没有区别,不是吗?
  • @GanapathiBhat 如果我们选择不关心我们真正关心的所有事情,那么我们可以安排不关心差异。这是微不足道的,不是很有用。
猜你喜欢
  • 1970-01-01
  • 2011-10-16
  • 2014-07-20
  • 1970-01-01
  • 2018-01-30
  • 2012-05-24
  • 2023-03-30
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多