【问题标题】:double precision in Ada?Ada 的双精度?
【发布时间】:2010-04-20 19:43:23
【问题描述】:

我对 Ada 很陌生,想看看它是否提供双精度类型。我看到我们有 float 和

Put( Integer'Image( Float'digits ) );

在我的机器上给出的值为 6,这对于数值计算是不够的。

Ada 是否像 C 语言中那样具有 double 和 long double 类型?

非常感谢...

【问题讨论】:

  • 虽然我们讨论的是实数,但您可能还想了解 Ada 的定点支持。
  • 谢谢。我已经开始阅读有关 Ada 的内容,稍后我会对此进行研究。

标签: double precision ada numeric


【解决方案1】:

比这要复杂一点。

编译器必须支持的唯一预定义浮点类型是Float。编译器可以选择支持Short_FloatLong_Float。您应该能够查看编译器文档的附录 F 以了解它支持的内容。

实际上,您的编译器几乎可以肯定地将 Float 定义为 32 位 IEEE 浮点数,将 Long_Float 定义为 64 位。请注意,C 的floatdouble 也几乎可以这样工作。 C 实际上并没有定义它们的大小。

如果您绝对必须具有一定的精度(例如:您正在与必须使用 IEEE 64 位的外部设备共享数据),那么您可能应该准确地定义自己的浮点类型精确。这将确保您的代码可以移植到您将其移至的任何平台或编译器,或者它会产生编译器错误,以便您解决问题。

【讨论】:

  • 谢谢。我尝试了 Long_Float,得到了 15 位数字 :),对此我很满意 :)。我正在使用带有 GNAT 编译器的 AdaGIDE IDE。
  • X86 上的 Gnat 实际上支持(完全不可移植的)Long_Long_Float,它使用英特尔 FPU 的所有 80 位数字,如果你想疯狂的话。
  • 我用 Long_Long_Float 得到 18 位数字。这对于数值计算来说已经绰绰有余了。
【解决方案2】:

您可以创建您喜欢的任何大小的浮动。很长一段时间会是:

type My_Long_Float is digits 11;

Wiki Books 是这样的一个很好的参考。

【讨论】:

  • 我对 Ada 很陌生。我正在测试我的 IDE 和编译器,看看我是否可以运行 Ada 程序。感谢您的回答。
  • 这是真的。在实践中,使用与 FPU 不兼容的古怪浮点数可能会有些麻烦(假设您需要硬件浮点数)。但是,如果您想要使用精确大小的浮点数,这正是您想要做的,无论您的代码最终使用什么编译器/平台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多