【问题标题】:GMP ceiling functionGMP天花板功能
【发布时间】:2012-05-09 21:43:53
【问题描述】:

我想用 GMP 找到一个非常大的数的平方根的上限。在 C 中,ceil(sqrt(n))

整数的 GMP 平方根会截断结果,因此 10 的平方根将报告为 3。浮点平方根按预期工作,但我需要取下一个最大的整数。 mpf_get_d 向零舍入,但除此之外做我想要的。如何求大数平方根的上限?

【问题讨论】:

    标签: c math gmp


    【解决方案1】:

    这是一个快速而肮脏的技巧:

    ceil( sqrt(n) ) = trunc_sqrt(n - 1) + 1
    

    其中trunc_sqrt(n) 是您当前使用的 GMP 整数平方根函数。

    这应该适用于所有整数n > 0

    【讨论】:

      【解决方案2】:

      不使用mpf_ceil() 有什么具体原因吗?对我来说,这听起来像是最合乎逻辑的一步,除非我错过了什么。

      编辑:重新阅读您的问题后,有什么理由将数字视为整数而不是浮点数?

      【讨论】:

      • 啊..我没看到。我正在查看浮点算术和浮点转换部分;它在杂项部分。我搜索了“GMP天花板浮动功能”的各种组合,但没有成功。
      • 最后我需要一个整数,我想尽快转换回一个。平方根是计算中唯一不应该是整数的部分。
      • 转换为浮点肯定会起作用,但您需要确保以足够的精度进行转换,并且在转换回整数之前正确舍入结果。在这种情况下,我对 +/- 1 的回答可能更简单、更容易验证。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多