【发布时间】:2021-11-07 16:18:13
【问题描述】:
非零数的最小值:
#include <iostream>
#include <algorithm>
int main() {
double s1 = 1000;
double s2 = 400;
double s3 = 300;
double s4 = 10;
double minimum = std::min({s1, s2, s3, s4});
std::cout<<minimum<<"\n";
double var = 1/minimum;
std::cout<<var;
}
这工作正常并返回:
10
0.1
问题是当其中一个数字为零时:
#include <iostream>
#include <algorithm>
int main() {
double s1 = 1000;
double s2 = 400;
double s3 = 300;
double s4 = 0;
double minimum = std::min({s1, s2, s3, s4});
std::cout<<minimum<<"\n";
double var = 1/minimum;
std::cout<<var;
}
返回:
0
inf
预期结果:
300
0.00333333
如何在计算中忽略零?
【问题讨论】:
-
std::min函数按预期工作,它返回最小值。如果您想忽略零,则需要将其从传递给std::min的值列表中删除。一种简单的方法是将值放入容器中,使用std::remove_if删除零,然后使用例如std::min_element在容器上。 -
你可以传递一个 lambda 作为第二个参数来比较运算符并忽略你想忽略的数字。
标签: c++ minimum divide-by-zero