相关疑难解决方法(0)

为什么NaN不等于NaN?

相关的IEEE标准定义了一个数字常量NaN(不是数字),并规定NaN应该比较为不等于它自己.这是为什么?

我熟悉的所有语言都实现了这个规则.但它经常会导致严重的问题,例如当NaN存储在容器中时,NaN存在于正在排序的数据中等时的意外行为等.更不用说,绝大多数程序员都希望任何对象都等于自身(在他们了解NaN之前,令人惊讶的是他们增加了错误和混乱.

IEEE标准经过深思熟虑,因此我确信NaN的比较与其本身相同是很糟糕的.我只是想不通它是什么.

language-agnostic floating-point nan ieee-754

114
推荐指数
5
解决办法
3万
查看次数

在C++中使用min和max函数

从C++,是minmax优选超过fminfmax?为了比较两个整数,它们是否提供基本相同的功能?

您是倾向于使用这些功能集中的一个还是更喜欢自己编写(可能是为了提高效率,可移植性,灵活性等)?

笔记:

  1. C++标准模板库(STL)在标准C++ 算法头中声明minmax函数.

  2. C标准(C99)提供标准C math.h标头中的函数fminfmax函数.

提前致谢!

c c++ max min

69
推荐指数
5
解决办法
26万
查看次数

有没有办法阻止开发人员使用std :: min,std :: max?

我们有一个算法库对可能是NaN的数字进行大量std::min/ std::max操作.考虑这篇文章:为什么Release/Debug对std :: min有不同的结果?,我们意识到它显然是不安全的.

有没有办法阻止开发人员使用std::min/ std::max

我们的代码使用VS2015和g ++编译.我们的所有源文件都包含一个公共头文件(通过/FIVS2015和-includeg ++的选项).是否有任何代码/编译指示可以放在这里使任何cpp文件使用std::minstd::max无法编译?

顺便说一下,使用此功能的遗留代码(如STL标头)不应受到影响.只有我们编写的代码才会受到影响.

c++

12
推荐指数
3
解决办法
4003
查看次数

Inhowfar做IEEE754浮标满足LessThanComparable吗?

TL; DR执行IEEE754浮点值,包括 NaN满足LessThanComparable

具体来说,问题" 为什么Release/Debug对std :: min有不同的结果? "让我抬起头来LessThanComparable:

该类型必须与<运算符一起使用,结果应该具有标准语义.

要求

类型T满足LessThanComparable if

特定

  • a,b和c,类型T或const T的表达式

以下表达式必须有效并具有指定的效果

与以下属性建立严格的弱排序关系(...)

我在标准中对它进行双重检查,似乎它在那里基本相同,并且我查看了严格弱序的维基百科def .

有些人认为这是包括楠组IEEE浮点瓦莱斯的并不能满足这一概念:与南两边的任何比较将始终产生错误,我一直在寻找的定义,它是不是在所有对我是否明显NaN中断的严格弱顺序的存在:

对于Wikipedia上给出的列表:

  • 对于S中的所有x,不是x <x(反射性)的情况.
  • 对于S中的所有x,y,如果x <y则不是y <x(不对称)的情况. see below
  • 对于S中的所有x,y,z,如果x <y且y <z则x <z(传递性).
  • 对于S中的所有x,y,z,如果x与y无法比较(x <y和y <x hold),并且y与z无法比较,则x与z无法比较(无法比较的传递性).

似乎维基百科上定义的严格的弱排序公理明确地提出了可能的incomparable价值观:NaN似乎是一个很好的候选者?

另一方面,标准说:(25.5/4)

如果我们定义equiv(a, b)!comp(a, b) && !comp(b, a),那么要求是comp和equiv都是传递关系:

(4.1) - comp(a, b) …

c++ floating-point ieee-754 language-lawyer

5
推荐指数
1
解决办法
247
查看次数

标签 统计

c++ ×3

floating-point ×2

ieee-754 ×2

c ×1

language-agnostic ×1

language-lawyer ×1

max ×1

min ×1

nan ×1