问题标签 [numeric-limits]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
765 浏览

c++ - C++中简单数学表达式的编译时间优化

我有一段代码,它基本上为数组的所有元素添加了一些常数

矩阵的标量类型为unsigned short int. 我正在探索的其他一些选项如下:

第二种解决方案对我来说看起来最易读,但与第一种选择相比,我是否需要支付罚金。是否有任何标准编译器会在编译时预先计算?

我目前正在使用 gcc 4.6.3,但由于对旧代码的某些依赖,我没有使用 C++11。

更新:

根据我对汇编输出的有限了解,我会说编译器没有优化它。即使使用 -std=c++0x 标志,情况也是一样的。

以下是汇编输出:

使用带有 -std=c++0x 标志的方法 2

硬编码文字(见第 26 行)

更新2

无论是否使用 -std=c++0x 标志,使用 -O2 标志都会产生相同的汇编文件。

结论

由于像 -O2 这样的优化标志可以完成正确的工作,因此 Method2 可能是最佳实践。此外,由于这些代码现在是类成员方法的一部分,我最终使用了一个私有 const 变量初始化为std::numeric_limits<MyMatrix::Scalar>::max()/2 + 1

0 投票
1 回答
175 浏览

c++ - 将大量用户输入减少到极限?(C++)

我的 C++ 程序中有一个从终端收集一个数字的函数。

我希望它接受用户输入的任何数字,将带符号的 long long int 范围之外的数字减少到确切的限制,正确地通知用户任何减少,并成功返回。

所有非数字输入应该被完全丢弃并无限地重新提示用户。

我认为过大的输入会自动减少到有符号限制,但这个函数将它们视为无效并给我非数字重新提示。我怎样才能解决这个问题?

我包括 iostream、string 和 climits,并在全局范围内使用命名空间 std。

0 投票
2 回答
205 浏览

c++ - 游戏/程序如何计算高于 C++ 限制的数字?

如果所有类型的值(整数、浮点数等)都有限制,那么像 excel 或游戏这样的程序如何计算出比这些更高的数字呢?这些公司是否创建了自己的专有计算器?有处理这个的标准库吗?

编辑:清晰度

0 投票
2 回答
995 浏览

c++ - 为什么没有 numeric_limits::min() 返回最小值?

当我运行此代码时:

我希望看到一个不可预测的结果。但我得到了正确答案:

这怎么可能?

0 投票
2 回答
1004 浏览

c++ - std::numeric_limits 作为条件

有没有办法可以使用std::numeric_limits<T>::is_integerstd::numeric_limits<T>::is_specialized更改模板行为?

例如我可以这样做:

0 投票
1 回答
525 浏览

c++ - numeric_limits::max 和“从 'int (*)()noexcept (true)' 到 'value_t {aka int}' 的无效转换”

我有一个使用定义的类型typedef unsigned int value_t;和一个函数

编译器拒绝编译它,说:从 'int (*)()noexcept (true)' 到 'value_t {aka int}' 的无效转换。

这是什么意思?查看 numeric_limits 类,该min()函数应该返回一个通过模板类型名传递给它的类型的变量,所以value_t在这种情况下。那么为什么代码不能编译呢?

0 投票
1 回答
1611 浏览

c++ - 如果`double`或`long double`适合`long long`,如何正确检查?

乍一看似乎很简单,但我找不到任何关于这个案例的好的描述。

我有一个返回 64 位值的方法。该值是使用值在内部计算的long double。在方法结束时,我想检查是否long double在值的范围内long long,否则只分配最大值long long

我使用以下代码,它只检查正范围,因为没有负结果:

现在我想知道,long double可以等于一个double. 是否会转换static_cast<long double>(std::numeric_limits<long long>::max())始终正常工作吗?

还是有另一种更好的方法来检查范围?

0 投票
1 回答
138 浏览

c++ - numeric_limits 中是否存在错误或者我只是感到困惑?

我遇到了一些奇怪的行为,至少在我自己的脑海中,在调试一些涉及确定加法操作是否会下溢双倍的代码时。这是一个演示我发现的示例程序。

当我执行这段代码时,我得到了真实的结果。这是一个错误还是我只是睡眠不足?

0 投票
3 回答
1170 浏览

c++ - 在 C++ 中,仅 8 个字节可以存储 1024 位的两倍?

我不知道这里发生了什么。

我发现以下数据类型的大小(以字节为单位):

什么!!!

双先生如何在 8 个字节中存储如此大的值???

0 投票
2 回答
22227 浏览

c++ - std::numeric_limits::max 的语法错误

我的类结构定义如下:

问题是我不能使用 'std::numeric_limits::max()' 并且编译器说:

Error 8 error C2059: syntax error : '::'

Error 7 error C2589: '(' : illegal token on right side of '::'

我使用的编译器是 Visual C++ 11 (2012)