ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
vde::foundation::Interval类 参考

双精度区间算术类 更多...

#include <interval.h>

Public 成员函数

 Interval ()
 默认构造:空区间 [0, 0] 更多...
 
 Interval (double v)
 从单值构造精确区间(退化为点) 更多...
 
 Interval (double l, double h)
 从上下界构造区间 更多...
 
double mid () const
 区间中点 更多...
 
double width () const
 区间宽度 更多...
 
bool contains (double v) const
 判断区间是否包含给定值 更多...
 
bool is_exact (double eps=1e-12) const
 判断区间是否足够窄(收敛) 更多...
 
bool overlaps (const Interval &o) const
 判断两个区间是否有重叠 更多...
 
int cmp (const Interval &o) const
 确定性区间比较 更多...
 
Interval operator+ (const Interval &o) const
 区间加法 更多...
 
Interval operator- (const Interval &o) const
 区间减法 更多...
 
Interval operator* (const Interval &o) const
 区间乘法 更多...
 
Interval operator/ (const Interval &o) const
 区间除法 更多...
 
Interval operator- () const
 取负 更多...
 
Interval sqrt () const
 区间平方根 更多...
 

静态 Public 成员函数

static Interval from_double (double v, double error=0)
 从双精度值创建区间(含舍入误差带) 更多...
 
static Interval from_coord (double v)
 从坐标值创建区间(含 ULP 误差带) 更多...
 

Public 属性

double lo
 
double hi
 

详细描述

双精度区间算术类

存储区间 [lo, hi] 的上下边界,支持区间算术运算和确定性比较。 主要用于验证浮点计算的可靠性:若区间结果不跨越零,则可确定符号; 若跨越零,则说明双精度不足以确定结果,需要更高精度或精确算术。

区间运算遵循保守原则(结果区间包含所有可能的真实值), 即 out = [min(所有组合), max(所有组合)]。

在文件 interval.h20 行定义.

构造及析构函数说明

◆ Interval() [1/3]

vde::foundation::Interval::Interval ( )
inline

默认构造:空区间 [0, 0]

在文件 interval.h25 行定义.

◆ Interval() [2/3]

vde::foundation::Interval::Interval ( double  v)
inline

从单值构造精确区间(退化为点)

参数
v区间值,[v, v]

在文件 interval.h31 行定义.

◆ Interval() [3/3]

vde::foundation::Interval::Interval ( double  l,
double  h 
)
inline

从上下界构造区间

自动交换以确保 lo ≤ hi。

参数
l下界
h上界

在文件 interval.h41 行定义.

成员函数说明

◆ cmp()

int vde::foundation::Interval::cmp ( const Interval o) const
inline

确定性区间比较

仅当两个区间无重叠时才能确定大小关系。

参数
o另一个区间
返回
-1 若确定 this < o
1 若确定 this > o
0 若区间重叠,无法确定
Interval a(1.0, 2.0), b(3.0, 4.0);
int c = a.cmp(b); // c == -1 (确定 a < b)
Interval c(1.0, 3.0), d(2.0, 4.0);
int r = c.cmp(d); // r == 0 (重叠,无法确定)
Interval()
默认构造:空区间 [0, 0]
Definition: interval.h:25

在文件 interval.h96 行定义.

引用了 hi , 以及 lo.

被这些函数引用 vde::foundation::orient_2d_verified().

◆ contains()

bool vde::foundation::Interval::contains ( double  v) const
inline

判断区间是否包含给定值

参数
v测试值
返回
true 若 lo ≤ v ≤ hi

在文件 interval.h60 行定义.

引用了 hi , 以及 lo.

◆ from_coord()

static Interval vde::foundation::Interval::from_coord ( double  v)
inlinestatic

从坐标值创建区间(含 ULP 误差带)

误差估计为 |v| * 2.22e-16 + 1e-300,即双精度最小单位。

参数
v坐标值
返回
包含浮点舍入误差的区间

在文件 interval.h181 行定义.

被这些函数引用 vde::foundation::orient_2d_interval().

◆ from_double()

static Interval vde::foundation::Interval::from_double ( double  v,
double  error = 0 
)
inlinestatic

从双精度值创建区间(含舍入误差带)

参数
v中心值
error误差半径(默认 0)
返回
[v - error, v + error]

在文件 interval.h169 行定义.

◆ is_exact()

bool vde::foundation::Interval::is_exact ( double  eps = 1e-12) const
inline

判断区间是否足够窄(收敛)

参数
eps宽度阈值(默认 1e-12)
返回
true 若区间宽度 < eps

在文件 interval.h67 行定义.

引用了 width().

◆ mid()

double vde::foundation::Interval::mid ( ) const
inline

区间中点

返回
(lo + hi) / 2

在文件 interval.h47 行定义.

引用了 hi , 以及 lo.

◆ operator*()

Interval vde::foundation::Interval::operator* ( const Interval o) const
inline

区间乘法

取四项乘积的最小值和最大值作为结果区间。

返回
[min(a*c,a*d,b*c,b*d), max(a*c,a*d,b*c,b*d)]

在文件 interval.h127 行定义.

引用了 hi , 以及 lo.

◆ operator+()

Interval vde::foundation::Interval::operator+ ( const Interval o) const
inline

区间加法

返回
[this.lo + o.lo, this.hi + o.hi]

在文件 interval.h108 行定义.

引用了 hi , 以及 lo.

◆ operator-() [1/2]

Interval vde::foundation::Interval::operator- ( ) const
inline

取负

在文件 interval.h147 行定义.

引用了 hi , 以及 lo.

◆ operator-() [2/2]

Interval vde::foundation::Interval::operator- ( const Interval o) const
inline

区间减法

返回
[this.lo - o.hi, this.hi - o.lo](保守估计)

在文件 interval.h116 行定义.

引用了 hi , 以及 lo.

◆ operator/()

Interval vde::foundation::Interval::operator/ ( const Interval o) const
inline

区间除法

若除区间跨越零,返回极大区间表示不确定性。

返回
结果区间或 [-∞, +∞](除数为零区间)

在文件 interval.h139 行定义.

引用了 hi , 以及 lo.

◆ overlaps()

bool vde::foundation::Interval::overlaps ( const Interval o) const
inline

判断两个区间是否有重叠

参数
o另一个区间
返回
true 若存在公共点

在文件 interval.h74 行定义.

引用了 hi , 以及 lo.

◆ sqrt()

Interval vde::foundation::Interval::sqrt ( ) const
inline

区间平方根

下界对 0 取 max 以处理负值(保守处理)。

返回
[sqrt(max(0, lo)), sqrt(max(0, hi))]

在文件 interval.h158 行定义.

引用了 hi , 以及 lo.

◆ width()

double vde::foundation::Interval::width ( ) const
inline

区间宽度

返回
hi - lo

在文件 interval.h53 行定义.

引用了 hi , 以及 lo.

被这些函数引用 is_exact().

类成员变量说明

◆ hi

double vde::foundation::Interval::hi

在文件 interval.h22 行定义.

被这些函数引用 cmp(), contains(), mid(), operator*(), operator+(), operator-(), operator/(), overlaps(), sqrt() , 以及 width().

◆ lo

double vde::foundation::Interval::lo

在文件 interval.h22 行定义.

被这些函数引用 cmp(), contains(), mid(), operator*(), operator+(), operator-(), operator/(), overlaps(), sqrt() , 以及 width().


该类的文档由以下文件生成: