我正在创建一个容器类,我想指定它的最大大小(如果与其自身相乘)不应超过 unsigned long long
的最大值(具体来说,std::numeric_limits<unsigned long long>::max()
)。
假设ULLONG_MAX
是 264-1,此计算的安全性如何?如有必要,我该如何改进?
typedef unsigned long long size_type;
size_type max_size = size_type(std::sqrt(ULLONG_MAX)) - 1;
最佳答案
232 的平方是 264,太大了。
232 - 1 平方等于 264-233+1。
所以只需使用 232-1。
一般(static_cast<T>(1) << static_cast<T>(sizeof(T)*4)) - 1
获得 T
类型的最大可平方无符号值,如果T
是无符号整型。
关于c++ - 保证 f(ULLONG_MAX) * f(ULLONG_MAX) 不大于 ULLONG_MAX 的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68585114/