選擇你自己的區間類型

首先,你需要選擇你的基類型. 為了獲得一個有用的區間類型, 數字應當滿足一些要求.請參見這一頁來瞭解這些要求. 當你的基類型足夠強壯, 你可以進行下一步,策略的選擇。

就像你已經知道的那樣,如果你不是偶然看到這個頁面,區間類需要一個策略參數來描述捨入和檢查策略,要做的第一件事是確認默認的策略是否適用於你的情況,如果你的基類型不是 float, double, 或 long double, 默認的捨入策略可能是不適用的,.然而, 通過使用你的基類型來特化interval_lib::rounded_math , 默認的捨入策略將是適用的.

默認的策略定義一個進行精確運算的interval類型 (對於 float, double, long double), 檢測非法數字,並在每次產生空區間的時候拋出異常. 這是一個簡明的描述,你應當參考相關的章節來獲取關於默認策略的更詳細的描述,除非你需要一些特殊行為,默認的類型在大多數的情況下都是有用的。

在完整定義了區間類型之後 (以及它的策略), 剩下的唯一要做的就是確認已經定義了常量並且std::numeric_limits是正確的 (如果需要的話). 現在你可以使用新版的區間類型了

例子

Solving systems

如果你使用區間庫為了通過二分法來解決相等和不等系統問題(equation and inequation systems ), 或許boost::interval<double> 就是你所想要的,如果包含在一個受保護的捨入方式代碼塊中,這種計算是精確的並且它們是非常快速的(參見性能 章節). 比較是"確定的"; 它可能是使用最廣的比較類型,通過使用明確的比較函數,其它的比較方式同樣是可以訪問的,檢查禁止空區間, 它們不是必須,因為如果在計算的過程中產生的一個空區間,那麼在計算的最後將會有一個空區間,檢查同樣也禁止非法數字 (對於浮點數是NaN). 如果你僅僅使用精確的浮點數常量 (這些常量是 NaNs) 那麼將會有一個小的性能影響; 你或許將會使用一個更好的知道如何對內聯函數進行優化的編譯器,那麼所有的這此小的測試將會魔法般消失 (如果沒有,那麼到了你升級編譯器的時候了).

操作寬的區間

你可能想要使用這個庫來處理那些不精確的邊界或不精確的數字。特別的,你可能想要使用這個庫來重寫和簡化一個已經存在的算法,在那種情況下,你對包含性質並不感興趣,你只對庫中提供的運算函數感興趣, 因此你不需要使用任何的捨入,可能檢查也不是有用的. 使用一個"精確計算"的捨入策略(你可以想出一個特定於這種情況的捨入策略的名字 )以及不對任何的非法數字和空區間進行檢查的檢查策略.這樣做之後,你所獲得的庫函數就會減少到最少了,兩個區間的加法就僅僅是兩個數字的加法).

計算範圍

你的程序的輸入可能是空區間或是非法的數字(例如, 一個數據庫可以在一些字段中接受未定義的值)而且你程序的核心也可能進行一些非算術的運算,而不會一直傳播空區間. 例如,在這個庫中,如果另一個參數是合法的,函數hull可以接受一個空區間但不產生一個空的區間. 如果兩個區間並不相交,函數intersect也能夠產生空區間. 在這種情況下,每一次產生空區間或是使用非法值時是否拋出一個異常並不是很有趣的,產生和傳播空區間將會更好一些,因此你需要將檢查策略改變為一些類似於interval_lib::checking_base<T>的類.

改變區間類型

這個例子並不是處理一個完成的案例,但是伴有一個經常發生的情況,有時,通過將它轉化為另一種類型的區間來改變一個區間的策略可能是很有用的,例如, 這種情況會在為了加速運算而使用未保護的區間類型的情況下發生,它其實就是捨入策略的改變, 同樣也會在你臨時允許產生空區間的情況下發生。它實際上是檢查策略的改變,這些改變不應當被禁止,它們能夠極大的增強一個程序(lisibility, 收益(interest), 性能(performance)).


Valid HTML 4.01 Transitional

Revised 2006-12-24

Copyright © 2002 Guillaume Melquiond, Sylvain Pion, Hervé Brönnimann, Polytechnic University

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)