【问题标题】:Fast BigFloat unit for DelphiDelphi 的快速 BigFloat 单元
【发布时间】:2011-09-10 08:47:11
【问题描述】:

我正在寻找一个快速的 BigFloat 单元,它可以处理加法、减法、乘法和除法(log 可以,但不是必需的),并且精度至少为 100 位小数。 我已经尝试过this 单元,但它比标准扩展操作慢了大约 1,000 倍。 那么,有人知道 Delphi 的快速(呃)BigFloat 单元吗?

亨利

【问题讨论】:

  • 这确实是谷歌在寻找“delphi bigfloat”时的第一击。第二个、第三个和第四个你也试过了吗?
  • @GolezTrol 是的,我做到了。第二个包含一个断开的链接,第三个导致一个对我不起作用的单元,第四个是 stackoverflow.com 上的这个线程。
  • @David Heffernan 我应该使用哪个 C 库,如何通过 DLL 链接它以及如何在 Delphi 中使用它?
  • 我不知道第一个问题的答案,但我可以做到!
  • 这里是一个用于 GMP 的 Delphi 包装器的链接。 code.google.com/p/gmp-wrapper-for-delphi

标签: delphi bignum bigfloat


【解决方案1】:

总结 OP 问题的 cmets。

C 库可能是大型浮点库的最佳解决方案。

GMP 声称是最快的免费库,自 1991 年以来通过汇编进行了优化。

对 GMP 库使用 this Delphi 包装器。

要以合理的成本/工作量获得更快的速度,CUDA/GPU 解决方案可以胜任。 有工作正在进行,但我找不到最终的解决方案。

【讨论】:

  • 谢谢,Delphi 的 GMP 比我以前使用的库要快,但仍然慢得要命……
【解决方案2】:

软件浮点本质上比硬件浮点慢 1 或 2 个数量级。再加上您正在寻找更高的精度,您可能还有另一个数量级。

您的期望可能不切实际。

【讨论】:

  • 确实如此。大小事项。单浮点运算也比双精度更快。
  • @GolezTrol:在 Delphi-XE2-64bit 中除外。 :-)
  • @Warren 不正确。阅读 Eric 发现{$EXCESSPRECISION OFF} 的后续行动。
  • @Warren,在打开(默认)开关的情况下,单浮点计算通过在内部使用更高的精度来模拟 X32 位(在 X32 中扩展,在 X64 中扩展)。关闭后,整个计算都以单精度进行,从而显着加快速度。 MS 编译器也有类似的开关。您可能会在此过程中丢失一些信息,但在像 FM 这样的图形中,这没什么大不了的。
  • 而 EXCESSPRECISION ON 的额外精度仅在表达式的中间步骤中获得,如果将结果存储回单精度,无论如何都会丢弃多余的精度,因此这是一个相当脆弱的精度增益。但是,如果您重新跟进,则会发现一个编译器错误,这在某些情况下意味着您最终可能会得到垃圾,因此在下一个编译器更新之前,EXCESPRECISION OFF 是有风险的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
相关资源
最近更新 更多