| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |

IlcFloatExp类是受约束浮点表达式的根。 受约束浮点表达式根据其子表达式的域计算其域。
事实上,受约束浮点变量本身就是一个受约束浮点表达式:类 "IlcFloatVar是 "IlcFloatExp的子类,因此受约束浮点变量就是一个域被存储的受约束浮点表达式。 由于受限连续浮点变量域中的元素数量非常多(通常为数百万),因此通常会有一个与变量相关的区间来表示其域。
该类中的大多数成员函数都包含 "assert语句。 有关宏 "NDEBUG(打开或关闭这些 "assert语句的方法)的解释,请参阅Assert 和 NDEBUG 概念。
精度
在 CP 优化器中,所有浮点数值的计算都是以双精度模式进行的,即在大多数硬件上都是 64 位。
CP 优化器中的每个受约束浮点表达式都有一个相对精度。 在约束传播过程中,我们会考虑到这种相对精度:如果与浮点表达式相关的区间大小小于与该表达式相关的精度,那么我们就会认为该表达式固定为该区间的平均值。 换句话说,表达式固定为这样一个区间的平均值。 因此,在这种情况下,精确度代表了这一数值的不确定程度。 更正式地说,当一个精度由 "precision表示的受约束浮点变量 "x的相关区间以 "min和 "max"为界,且 "((max - min)/(max{1, |min|}) <= precision.
变量的精度越小,使用它进行的计算就越精确,但这种计算当然会耗费更多时间。
域
受约束浮点表达式("IlcFloatExp实例)的域由其子表达式的域计算得出。 例如,如果 "x和 "y都是 "IlcFloatExp的实例,那么 "x+y"的域就包含 "[x.getMin()+y.getMin(),
x.getMax()+y.getMax()]的范围。 (相反,受约束浮点变量("IlcFloatVar的实例)的域是被存储的) 受约束浮点表达式的域可以缩小到空的程度。 在这种情况下,就会触发故障,因为不可能有任何解决方案。
检查溢出和下溢
CP 优化器明确检查浮点运算的溢出和下溢。
IEEE 754 是电气与电子工程师协会提出的浮点运算标准。 CP 优化器中浮点数的实现符合这一标准。
回溯和可逆性
为该类定义的、能够修改受约束变量的所有成员函数和运算符都是可逆的。 特别是,约束发布函数所做的更改是通过可逆赋值进行的。 因此,当 CP 优化器回溯时,任何受限变量的值、域和约束条件都会恢复。
更多信息,请参阅CP 优化器中的传播概念。
修饰符是一个成员函数,如果可以的话,它可以缩小受约束浮点表达式的域。 修改器不存储,与约束相反。 如果受约束浮点表达式是一个受约束浮点变量,则修改器调用导致的修改将存储在其域中。 否则,修改器的效果会传播到受约束浮点表达式的子表达式中。 如果域为空,则会发生故障。 修改器通常用于定义新的约束条件类别。
另请参阅:
IlcAbs, IlcFloatVar, IlcMax, IlcMin, IlcSquare, 操作员+, 操作员, 操作符*, 操作员/, 操作符<<
| 方法概要 | |
|---|---|
public void | display(ostream & str) const |
public IlcFloat | getMax() const |
public IlcFloat | getMin() const |
public IlcFloat | getPrecision() const |
public IlcFloat | getSize() const |
public | IlcFloatExp(IlcIntExp exp) |
public IlcBool | isFixed() const |
public IlcBool | isInDomain(IlcFloat value) const |
public void | setMax(IlcFloat max) const |
public void | setMin(IlcFloat min) const |
public void | setPrecision(IlcFloat p) const |
public void | setRange(IlcFloat min, IlcFloat max) const |
| 方法详细信息 |
|---|
CP 优化器中的受约束整数表达式可视为受约束浮点表达式,因为整数可以转换为浮点数值。 该构造函数用于将受约束整数表达式转换为受约束浮点表达式。 该构造函数创建了一个受约束浮点表达式,该表达式受约束等于受约束整数表达式 "exp。 换句话说,你可以用这个构造函数定义一个受约束浮点表达式等于一个受约束整数表达式。 这样的浮点表达式就可以像其他受约束的浮点表达式一样使用。 因此,可以在一个约束条件中结合整数和浮点表达式。
通常,编译器会自动将受约束的整数表达式转换为受约束的浮点表达式,因此无需使用此构造函数。 只有当编译器警告您在组合受约束浮点和整数表达式时出现问题时,您才可以使用它。
该成员函数将调用对象放到其参数指示的输出流中。
该成员函数返回调用对象的最大值。
该成员函数返回调用对象的最小值。
该成员函数返回调用的受约束浮点表达式的精度。 We say that a constrained floating-point variable x with a precision indicated by precision is 固定的 when its associated interval is bounded by min and max such that 
变量的精度越小,使用它进行的计算就越精确,但这种计算当然会耗费更多时间。
该成员函数返回调用约束浮点表达式的域宽度。 所谓域宽,是指域的两条边界之间的差值。
如果调用的约束浮点表达式固定为一个值,则该成员函数返回 "IlcTrue。 否则,成员函数返回 "IlcFalse。
This member function returns IlcTrue if value is in the domain of the invoking constrained floating-point expression. 否则,成员函数返回 "IlcFalse。
该成员函数从调用约束表达式的域中删除所有大于 "max的元素。 如果域因此为空,则调用函数 "IlcFail。 否则,如果域被修改,就会生成传播事件 "range。 此外,如果调用的受约束浮点表达式变成固定值,那么也会产生传播事件 "value。 该成员函数的效果是可逆的。
该成员函数从调用约束表达式的域中删除所有小于 "min的元素。 如果域变为空,则调用函数 "IlcFail。 否则,如果域被修改,就会生成传播事件 "range。 此外,如果调用的受约束浮点表达式变成固定值,那么也会产生传播事件 "value。 该成员函数的效果是可逆的。
该成员函数设置调用的受约束浮点表达式的精度。 这是一个不可逆转的动作。
该成员函数从调用约束表达式的域中删除所有小于 "min或大于 "max的元素。 如果域因此变为空,就会发生故障。 否则,如果域被修改,就会生成传播事件 "range。 此外,如果调用的受约束浮点表达式变成固定值,那么也会产生传播事件 "value。 该成员函数的效果是可逆的。