我正在创建一个容器类,我想指定它的最大大小,如果乘以它自己,不应该超过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,太大了
2<一口>32一口>- 1的平方是2<一口>64一口>2<一口>共舞,33 + 1。一口>
所以用232-1。
如果T
是无符号整型,那么(static_cast<T>(1) << static_cast<T>(sizeof(T)*4)) - 1
通常会得到T
类型中最大的可平方无符号值。