【发布时间】:2012-05-09 21:43:53
【问题描述】:
我想用 GMP 找到一个非常大的数的平方根的上限。在 C 中,ceil(sqrt(n))。
整数的 GMP 平方根会截断结果,因此 10 的平方根将报告为 3。浮点平方根按预期工作,但我需要取下一个最大的整数。 mpf_get_d 向零舍入,但除此之外做我想要的。如何求大数平方根的上限?
【问题讨论】:
我想用 GMP 找到一个非常大的数的平方根的上限。在 C 中,ceil(sqrt(n))。
整数的 GMP 平方根会截断结果,因此 10 的平方根将报告为 3。浮点平方根按预期工作,但我需要取下一个最大的整数。 mpf_get_d 向零舍入,但除此之外做我想要的。如何求大数平方根的上限?
【问题讨论】:
这是一个快速而肮脏的技巧:
ceil( sqrt(n) ) = trunc_sqrt(n - 1) + 1
其中trunc_sqrt(n) 是您当前使用的 GMP 整数平方根函数。
这应该适用于所有整数n > 0。
【讨论】:
不使用mpf_ceil() 有什么具体原因吗?对我来说,这听起来像是最合乎逻辑的一步,除非我错过了什么。
编辑:重新阅读您的问题后,有什么理由将数字视为整数而不是浮点数?
【讨论】: