相关疑难解决方法(0)

何时使用C float比较函数?

在最新的C++标准中,我注意到以下宏:

bool isgreater(float x, float y);
bool isgreaterequal(float x, float y);
bool isless(float x, float y);
bool islessequal(float x, float y);
bool islessgreater(float x, float y);
bool isunordered(float x, float y);
Run Code Online (Sandbox Code Playgroud)

这些宏来自C(7.12.14和7.12.14).

那么,为什么有人会使用这些宏而不是运算符呢?这些宏正在做什么特别的事情(比如检查inf),或者它们是否与它们相应的运算符相同?

C++示例:

#include <iostream>
#include <cmath>

int main()
{
  float x=0.2;
  float y=0.5;
  std::cout << x << " < " << y << " : " << std::boolalpha << std::islessequal( x, y ) << std::endl;
  std::cout << x << " < " << y << " …
Run Code Online (Sandbox Code Playgroud)

c c++ c++11

35
推荐指数
2
解决办法
2673
查看次数

std:map中的浮点键

下面的代码应该找到问题的关键3.0std::map其是否存在.但由于浮点精度,它将无法找到.

map<double, double> mymap;
mymap[3.0] = 1.0;

double t = 0.0;
for(int i = 0; i < 31; i++)
{
  t += 0.1;
  bool contains = (mymap.count(t) > 0);
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,contains将永远是false.我目前的解决方法是乘以t0.1而不是加0.1,如下所示:

for(int i = 0; i < 31; i++)
{
  t = 0.1 * i;
  bool contains = (mymap.count(t) > 0);
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是:

有没有办法将ifCompare引入std::mapif if use double键?浮点数比较的常见解决方案通常是这样的a-b < epsilon.但我没有看到这样做的简单方法std::map.我是否真的必须在double类中封装类型并覆盖operator<(...)以实现此功能?

c++ floating-point stl

31
推荐指数
3
解决办法
2万
查看次数

NaN是关联容器的有效键值吗?

考虑C++中有序和无序的关联容器double.

NaN有效的密钥类型吗?

对于有序的容器,我应该说"不",因为它不尊重严格的弱排序.

对于无序容器,我不知道.

以下是GCC 4.6.2中发生的情况:

#include <map>
#include <unordered_map>

#include <cmath>

#include <iostream>
#include <prettyprint.hpp>

int main()
{
  typedef std::map<double, int> map_type; // replace by "unorderd_map"

  map_type dm;
  double d = std::acos(5); // a good nan

  dm[d] = 2;
  dm[d] = 5;
  dm[d] = 7;

  std::cout << "dm[NaN] = " << dm[d] << ", dm = " << dm << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

对于有序地图,我得到:

dm[NaN] = 7, dm = [(nan, 7)]
Run Code Online (Sandbox Code Playgroud)

对于无序地图,我得到:

dm[NaN] = 0, dm …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map map nan

27
推荐指数
2
解决办法
1600
查看次数

标签 统计

c++ ×3

c ×1

c++11 ×1

floating-point ×1

map ×1

nan ×1

stl ×1

unordered-map ×1