问题标签 [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.
c++ - C++中简单数学表达式的编译时间优化
我有一段代码,它基本上为数组的所有元素添加了一些常数
矩阵的标量类型为unsigned short int
. 我正在探索的其他一些选项如下:
和
第二种解决方案对我来说看起来最易读,但与第一种选择相比,我是否需要支付罚金。是否有任何标准编译器会在编译时预先计算?
我目前正在使用 gcc 4.6.3,但由于对旧代码的某些依赖,我没有使用 C++11。
更新:
根据我对汇编输出的有限了解,我会说编译器没有优化它。即使使用 -std=c++0x 标志,情况也是一样的。
以下是汇编输出:
硬编码文字(见第 26 行)
更新2
无论是否使用 -std=c++0x 标志,使用 -O2 标志都会产生相同的汇编文件。
结论
由于像 -O2 这样的优化标志可以完成正确的工作,因此 Method2 可能是最佳实践。此外,由于这些代码现在是类成员方法的一部分,我最终使用了一个私有 const 变量初始化为std::numeric_limits<MyMatrix::Scalar>::max()/2 + 1
c++ - 将大量用户输入减少到极限?(C++)
我的 C++ 程序中有一个从终端收集一个数字的函数。
我希望它接受用户输入的任何数字,将带符号的 long long int 范围之外的数字减少到确切的限制,正确地通知用户任何减少,并成功返回。
所有非数字输入应该被完全丢弃并无限地重新提示用户。
我认为过大的输入会自动减少到有符号限制,但这个函数将它们视为无效并给我非数字重新提示。我怎样才能解决这个问题?
我包括 iostream、string 和 climits,并在全局范围内使用命名空间 std。
c++ - 游戏/程序如何计算高于 C++ 限制的数字?
如果所有类型的值(整数、浮点数等)都有限制,那么像 excel 或游戏这样的程序如何计算出比这些更高的数字呢?这些公司是否创建了自己的专有计算器?有处理这个的标准库吗?
编辑:清晰度
c++ - 为什么没有 numeric_limits::min() 返回最小值?
当我运行此代码时:
我希望看到一个不可预测的结果。但我得到了正确答案:
这怎么可能?
c++ - std::numeric_limits 作为条件
有没有办法可以使用std::numeric_limits<T>::is_integer
和std::numeric_limits<T>::is_specialized
更改模板行为?
例如我可以这样做:
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
在这种情况下。那么为什么代码不能编译呢?
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())
始终正常工作吗?
还是有另一种更好的方法来检查范围?
c++ - numeric_limits 中是否存在错误或者我只是感到困惑?
我遇到了一些奇怪的行为,至少在我自己的脑海中,在调试一些涉及确定加法操作是否会下溢双倍的代码时。这是一个演示我发现的示例程序。
当我执行这段代码时,我得到了真实的结果。这是一个错误还是我只是睡眠不足?
c++ - 在 C++ 中,仅 8 个字节可以存储 1024 位的两倍?
我不知道这里发生了什么。
我发现以下数据类型的大小(以字节为单位):
什么!!!
双先生如何在 8 个字节中存储如此大的值???
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)