我最近几周一直在研究区间算术,这是一个非常有趣的领域。尽管在过去几十年中有大量非常有趣的研究成果发表,但在我看来,它从未真正获得应有的认可。
其中一个原因是,标准的区间算术在处理包含零的区间进行除法时表现非常糟糕。如果你在常规区间算术中计算 1 / [-1, 2],你要么得到 [-∞, +∞],要么必须说这个运算是未定义的。这两种解决方案几乎没有用。实际上,正确的答案是 [-∞, -1] ∪ [0.5, +∞]:即两个不相交区间的并集。
这很有用,因为你可以自信地将一个非空的实数集合 ([-1, 0.5]) 排除在 1 除以一个介于 -1 和 2 之间的数所能得到的可能值集合之外。
但是,这种区间除法的定义产生的值并不是一个区间。如果你想定义一个封闭的算术系统,以便在区间值上构建和评估任意表达式,这就成了一个问题。
(这种行为扩展到任何不连续的函数,例如 tan(),在我的项目中也有实现——这并不容易!)
显然的解决方案是定义你在不相交区间的并集上的算术。这是2017年一篇名为“区间并集”的论文的主题,作者是 Schichl, H.、Domes, F.、Montanher, T. 和 Kofler, K.。
我制作的这个开源项目在 TypeScript 中实现了区间并集算术,形式是一个简单的交互式计算器,你可以亲自试用!底层的 TypeScript 库没有依赖,且在 IEEE 754 双精度浮点数(JS 原生数字类型)上实现了区间并集算术,并采用外向舍入。这确保了在浮点数固有的舍入问题存在时,区间结果的准确性。
返回首页