保证f(ULLONG_MAX) * f(ULLONG_MAX)不大于ULLONG_MAX的公式 &g

  • 本文关键字:MAX ULLONG 不大于 保证 c++
  • 更新时间 :
  • 英文 :


我正在创建一个容器类,我想指定它的最大大小,如果乘以它自己,不应该超过unsigned long long(特别是std::numeric_limits<unsigned long long>::max())的最大值。

假设ULLONG_MAX264-1,这种计算的安全性如何?如果有必要,我该如何改进它?

typedef unsigned long long size_type;
size_type max_size = size_type(std::sqrt(ULLONG_MAX)) - 1;

232的平方是264,太大了

2<一口>32- 1的平方是2<一口>642<一口>共舞,33 + 1。

所以用232-1。

如果T是无符号整型,那么(static_cast<T>(1) << static_cast<T>(sizeof(T)*4)) - 1通常会得到T类型中最大的可平方无符号值。

最新更新