为什么它不能正常工作,Numeric_limits
Why doesn't it work properly, Numeric_limits
>我有一个带有两个参数的函数,一个是正在测试元素的向量,另一个是我们输入为真或假的布尔变量。如果我们输入 true,那么它应该隔离并将所有数字总和为偶数的元素隔离并放置到一个新向量(以与它们出现的顺序相同(并返回该向量。对于 false,它是相反的奇数。而且你只能使用我在这里已经用过的东西,没有别的。
这就是它的样子。
std::vector<int> IzdvojiElemente(std::vector<int> v, bool flag){
std::vector<int> n;
for(int i(0); i<v.size();i++){
int suma(0);
int temp(v[i]);
if(temp<0) temp*=-1;
while(temp>0){
suma+=temp%10;
temp/=10;
}
if(flag && suma%2==0) n.push_back(v[i]);
if(!flag && suma%2!=0) n.push_back(v[i]);
}
return n;
}
这是它不起作用的主要功能之一:
std::vector<int> v1 {1,std::numeric_limits<int>::min(),2, std::numeric_limits<int>::max(),5};
std::vector<int> v2;
v2 = IzdvojiElemente(v1, false);
for(int i=0; i < v2.size(); i++)
std::cout << v2[i] << " ";
这是我应该得到的(作为输出(:
1 -2147483648 5
这就是我得到的:
1 5
出于某种原因,它要么忽略数字限制,要么忽略,而是使用错误的向量对它们进行排序。我不知道为什么。在任何其他情况下,它都可以正常工作。也许它溢出了,但我看不到在哪里。
是的,这是溢出。注意,在有符号整数的 2 补码表示(主流平台上的常见表示(中,可表示范围不是对称的:当最低可表示数为 -2147483648
时,则最高可表示数为 2147483647
。
因此,-2147483648 * -1
是有符号整数溢出和未定义行为,这意味着程序是错误的,任何事情都可能发生。
如果你应该正确处理std::numeric_limits<int>::min()
而不考虑内部表示,你将不得不以不同的方式处理负数(例如计算负数的数字和,然后只是对计算的总和进行符号反转(。
相关文章:
- <limits> 使用 VSC2019 编译旧代码时出错
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- limits.h中未确认的值
- OpenCV make error: limits.h 没有这样的目录文件
- boost::icl::interval 和 boost::numeric::interval 是否有可用的适配层?
- 在没有 <limits.h> 或 <values.h> 的系统上查找SHRT_MAX
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化
- 是否有内置函数可用于boost :: numeric ::间隔
- 使用 boost::numeric::odeint 积分非线性函数 f'(x, y, z) = a + b*I
- 模板实例化与Armadillo和Boost :: Numeric :: Odeint
- typedef 一个向量和 boost::numeric::ublas::vector 的固定大小
- 如何在没有 #include 的情况下获得DBL_MIN <limits> C++
- 为什么Boost Numeric库通过使用调试或发布模式给出不同的结果
- 从另一个子向量或subsatrix创建boost :: numeric :: ublas vector
- 包含 boost::numeric::ublas::matrix 的类的运算符重载
- GMOCK 叮当讨厌的错误"/usr/include/limits.h:123:16: fatal error: 'limits.h' file not found"
- Visual Studio malloc limits
- 当我<limits>在 c++ 代码中包含或<limit.h>时有什么区别
- 与CUDA/OpenMP兼容的`boost::numeric::odeint::runge_kutta-X`模板参数
- Limits of BOOST_FUSION_ADAPT_STRUCT