【问题标题】:Input of a double precision number输入双精度数
【发布时间】:2011-06-23 08:15:54
【问题描述】:

我编写了一些天文程序,并且我有 Jeffrey Sax 在 Meeus 的著作《天文算法》中实现算法的源代码。

他编写的函数之一是ReadReal(),它从用户那里获得一个实数(通过键盘或终端)。此函数的摘录如下所示:

scanf("%lf", &r);
return r * 1.000000000000001;

第二行乘以常数显然与舍入有关,但我看不出具体是什么。我已经搜索了答案,并且该常量出现在各个站点的许多地方,但在此上下文中却没有。有没有人有这方面的经验或知道这里发生了什么?重要吗?

感谢您的帮助。

【问题讨论】:

  • @Felix Kling 我开始对发布该链接的人感到恼火;什么鬼,如果你知道答案,为什么要向我们指出一些包含 10 个定理和各种琐碎的巨大科学论文?
  • @Felix Kling 按照你评论的逻辑,我可以开始写每个标记为“算法”的问题:“是的,它可能与 TAOCP 有关。阅读”。
  • @cnicutar:我不知道答案。我只是认为在这种情况下可能值得一读。我也对此感到恼火,但前提是它作为答案发布。我刚刚评论...
  • 我看过这篇论文,它看起来确实很有用;但是我需要花一些时间才能从上述论文中准确提取我需要的内容。也许我只需要花时间更彻底地了解它。我的背景是电子和嵌入式实时固件,所以我习惯于使用整数而不是 FP。我会继续浏览它并感谢您的所有 cmets。

标签: c algorithm floating-point


【解决方案1】:

这是指密度参数Ω,定义为宇宙的平均物质密度除以该密度的临界值。这会根据 Ω 是等于、小于还是大于 1 来选择三种可能的几何形状之一。这些几何形状分别称为平坦、开放和封闭宇宙。请看下面的图片以获得直观的表示。

您指定的 Ω 值在 大爆炸理论 中确定,并引发了所谓的平坦度问题。有关这方面的更多信息,请访问wiki again

要了解密度参数的重要性,请查看ultimate fate of the universe,它还对Ω进行了更全面的解释。

【讨论】:

  • 我认为 Gordon 是在说 ReadReal 实现将球形宇宙强加给我们。这很大胆。我,我更像是一个双曲线的人。
  • 我很想给图片+1,但因为未能链接到FRW metric而给-1。
  • 戈登,你高吗?图片很可爱。
【解决方案2】:

大多数体系结构中的浮点数(使用IEEE754 表示)只能准确表示具有有限二进制展开式的数字,即由11.00100100001 之类的数字精确表示(以及字符串的长度受浮点类型大小的限制,例如double 为 53。

任何不属于这种形式的数字,即不是 2 的幂的有限和,例如 1/3 或 1/5 或 1/10,都不能永远精确表达通过这样的浮点变量。

由于用户经常输入0.1 之类的值,而不是更贴切的0.125,因此在您的设置中很早就会遇到这种准确性损失。乘以你的常数是作者在他的平台上发现更接近他认为用户意图的一种方式。不过,这都是主观的。如果您只是以较短的精度打印,printf("%0.5f", x),您应该不会注意到缺乏准确性。

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多