c++ - Boost ICL : Are some combinations of interval types and functions not implemented?中函数 "contains"的基本使用

标签 c++ boost boost-icl

我开始使用 Boost ICL,并且偶然发现了一些非常基础的东西。例如,函数 contains 应该返回 true 或 false,这取决于给定元素是否在区间内。然而,这适用于 [right,left]_open_intervals 但不适用于 [open,closed]_inteval(请参见下面的示例)。

这似乎太明显了,不是疏忽。我正在以预期的方式使用库吗?

例如(使用 gcc 4.8 或 clang 3.3 和 Boost 1.54):

#include <boost/concept_check.hpp> //needed to make this MWE work, boost icl should include it internally

#include<boost/icl/right_open_interval.hpp>
#include<boost/icl/closed_interval.hpp>
#include<boost/icl/open_interval.hpp>
int main(){
    boost::icl::right_open_interval<double> roi(6.,7.);
    assert(boost::icl::contains(roi, 6.) == true);  //ok
    assert(boost::icl::contains(roi, 6.) == false); //ok

    boost::icl::closed_interval<double> oi(4.,5.); // or open_interval
    assert(boost::icl::contains( oi, 4.) == false); //error: "candidate template ignored"
    assert(boost::icl::contains( oi, 5.) == false); //error: "candidate template ignored"
}

注意:以上称为“静态”区间(因为它们的绑定(bind)属性是类型的一部分)。动态间隔按预期工作。

最佳答案

我猜这归结为浮点相等性测试相对无用。

你试过assert(0.1 + 0.2 == 0.3)吗?

尝试一下。我会等。

如果您已经知道答案,就会清楚为什么闭区间不容易正确实现。背景介绍:

此外,如果您有两个连续的闭区间 [a,b][b,c]b 属于哪个区间?

关于c++ - Boost ICL : Are some combinations of interval types and functions not implemented?中函数 "contains"的基本使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540364/

相关文章:

c++ - 如何从给定键的 interval_maps 中获取值?

c++ - 是什么让 Boost `interval_map` 忽略插入?

c++ - 排序给出最后位置元素的错误输出

c++ - 不能使用 push_back 将整数插入 1D/2D vector

c++ - boost python,使用 main global 以外的命名空间

c++ - 使用 Boost Asio 接受 IPv6 链接范围地址

c++ - 有一个指向项目实例的共享指针列表被转换为基类什么是将项目分类到单独列表中的转换选项?

c++ - Boost 状态图库——如何实现耗时的转换

c++ - C++ 中的跨平台二进制文件