【发布时间】:2019-05-20 04:16:00
【问题描述】:
我正在尝试尽可能高效地实施埃拉托色尼筛法。我想将我的素数数组的长度设置为
pi(n) < 1.25506n / ln n
但我不确定如何进行转换以安全地进行转换,也不知道哪种类型组合最适合。
我的列表的最大长度将受到数组的最大大小的限制。
我的猜测是,理想的组合取决于 size_t 在内部的实现方式及其上限。
我希望得到的结果接近
ceil( 1.25506n / ln n) 没有得到更小的数字。
对如何做到这一点有任何建议吗?
【问题讨论】:
-
n的大小是多少? -
请将代码和结果发布为文本,而不是图像。
-
@NathanOliver 您如何建议将公式作为文本发布?我想学习如何做到这一点!
-
@SergeyA 那么第一个可以写成
pi(n) < 1.25506n / ln n。第二个是ceil(1.25506n / ln n)。这并不完美,但现在看不到或屏蔽 imgur 的人至少可以理解 Q 的要求。 -
阵列的最大大小可能受到您可以在 RAM 上花费的最大金额的限制。在 64 位平台上,
size_t将是 2^64 个元素,确实是一个巨大的数字,UINT_MAX将是巨大的,例如 18446744073709551615。
标签: c++ casting floating-point type-conversion precision