c++ - 保证 f(ULLONG_MAX) * f(ULLONG_MAX) 不大于 ULLONG_MAX 的公式

标签 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,太大了。

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/

相关文章:

c++ - 自定义比较器(排序)作为(多) map 排序参数?

c++ - 使用#include 加载 OpenCL 代码

c++ - 项目中可用的本地头文件,但 make 给出 No such file or directory 错误

c++ - 杀死等待条件变量的 pthread

Python3 + ctypes回调在简单示例中导致内存泄漏

c++ - 有没有办法为 C++ api 打包 Tensorflow?

c++ - 默认构造函数 - 推迟成员变量的初始化

c++ - 为什么我不能在下面的 C++ 示例中使用对象的初始化列表构造

c++ - OF_SHARE_DENY_NONE 不分享阅读?

c++ - Gnome 平台上的基础开发