Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

使用宏來改變缺省策略(Using macros to Change the Policy Defaults)

你可以使用下面的各種宏來改變任何一個策略:

你可以通過將宏的定義放在函數或分佈的頭文件#included 之前來改變一個局部的策略。

[Caution] 注意

如果你將特定的宏添加到多個源文件中,那麼將會有違反只定義一次規則( One-Definition-Rule):這些宏必須在所有的編譯單元中設置為相同的。

[Caution] 注意

如果你將#define 放在了#include之後,那將沒有任何作用(並且它只會對#define後面的#include產生作用)。這可能不是你想要的結果。

如果你想要為所有的函數和分佈類型改變任何的策略,安裝範圍(nstallation-wide),那麼你可通過在boost/math/tools/user.hpp中定義宏來做到這一點。

BOOST_MATH_DOMAIN_ERROR_POLICY

定義當出現定義域錯誤時出現什麼結果,如果沒有定義,那麼缺省為throw_on_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error

BOOST_MATH_POLE_ERROR_POLICY

定義當出現 pole error時出現什麼結果,如果沒有定義,那麼缺省為throw_on_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error.

BOOST_MATH_OVERFLOW_ERROR_POLICY

定義當出現溢出錯誤時出現什麼結果,如果沒有定義,那麼缺省為throw_on_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error.

BOOST_MATH_ROUNDING_ERROR_POLICY

定義當出現捨入錯誤時出現什麼結果,如果沒有定義,那麼缺省為throw_on_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error.

BOOST_MATH_EVALUATION_ERROR_POLICY

定義當出現內部計算錯誤時出現什麼結果,如果沒有定義,那麼缺省為throw_on_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error.

BOOST_MATH_UNDERFLOW_ERROR_POLICY

定義當出現向上溢出錯誤時出現什麼結果,如果沒有定義,那麼缺省為ignore_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error.

BOOST_MATH_DENORM_ERROR_POLICY

定義當出現denormalisation error時出現什麼結果,如果沒有定義,那麼缺省為 ignore_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error.

BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY

定義當出現結果值未定義時出現什麼結果,如果沒有定義,那麼缺省為ignore_error,但可以設置為任何的錯誤處理的枚舉值:throw_on_error, errno_on_error, ignore_error or user_error.

BOOST_MATH_DIGITS10_POLICY

定義在內部使用多少個十進制數字進行計算:缺省為0-意味使用所有可用的數字-但可以設置為其它的十進制值。因為設置這個策略可能對精度產生明顯的影響,通常並不推薦你將這個值的缺省值改變。

BOOST_MATH_PROMOTE_FLOAT_POLICY

定義為了確保最大的精度,是否在內部將float 類型提升為double 類型,缺省為真,但可以設置為false來將這種類型提升關閉。

BOOST_MATH_PROMOTE_DOUBLE_POLICY

定義為了確保最大的精度,是否在內部將double 類型提升為long double 類型,缺省為真,但可以設置為false來將這種類型提升關閉。

BOOST_MATH_DISCRETE_QUANTILE_POLICY

定義離散分位點函數如何返回結果:一個整數或是一個浮點數,可以設置為:real, integer_round_outwards, integer_round_inwards, integer_round_down, integer_round_up, integer_round_nearest枚舉值之一,缺省為integer_round_outwards

BOOST_MATH_ASSERT_UNDEFINED_POLICY

定義一個特定分佈的數學未定義函數是否在編譯時產生一個失敗斷言。缺省為真:意味著任何的數學未定義函數將不能編譯。當設置為假的時候,這個函數可以編譯通過,但是返回值是一個定義定義域錯誤:這對於某些通用代碼可能是有用的,需要可以與所有的分佈類型一起工作並在運行時判定一個特定的屬性是否定義良好。

BOOST_MATH_MAX_SERIES_ITERATION_POLICY

定義在一個特殊函數完成計算之前它所允許進行的級數迭代的次數,並返回一個計算錯誤(evaluation_error) 。缺省為1000000。

BOOST_MATH_MAX_ROOT_ITERATION_POLICY

定義在一個特殊函數完成計算之前它所允許進行的根查找算法的次數,並返回一個計算錯誤(evaluation_error) 。缺省為200。

例子

假設我們希望溢出錯誤設置::errno 並返回無限值,離散分位點函數返回一個浮點值(而不是捨入為一個整數),並且,對於數學上未定義的函數可以通過編譯但是返回一個定義域錯誤。那麼我們可以將下面的宏添加到 boost/math/tools/user.hpp中:

#define BOOST_MATH_OVERFLOW_ERROR_POLICY errno_on_error
#define BOOST_MATH_DISCRETE_QUANTILE_POLICY real
#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false

或者在一個源文件中,我們可以將這些#define放在

#include <boost/math/distributions/normal.hpp>
  using boost::math::normal_distribution;

之前


PrevUpHomeNext