![]() |
Home | Libraries | People | FAQ | More |
這個庫中的所有的函數都被重載用於接受混合的浮點類型(或者混合的整型和浮點類型)參數。例如:
foo(1.0, 2.0); foo(1.0f, 2); foo(1.0, 2L);
只要"foo"是一個帶有兩個浮點參數的函數,上面的調用都是合法的調用。但這會產生一個問題。
如果所有的參數的類型是相同的(浮點類型)類型,那麼返回值的類型與參數的類型一樣。
否則,返回值的類型使用下面的方法來推測:
double,那麼結果類型為long double。double,那麼結果類型為double。float。例如:
cyl_bessel(2, 3.0);
返回一個 double 結果:
cyl_bessel(2, 3.0f);
在這種情況下,整數首先當作double處理,並且優先級比第二個float參數高。為了得到一個float類型結果,我們需要所有的參數都為float類型:
cyl_bessel_j(2.0f, 3.0f);
當有一個或多個參數不是模板參數時,那麼它不會對結果類型產生影響:
sph_bessel(2, 3.0f);
返回float ,因為第一個參數不是模板參數,所以它不影響結果類型:如果沒有這個規則,那麼帶有整型參數的函數永遠都不能返回float類型。
對於用戶自定義類型,下面的所有調用都返回 NTL::RR 類型結果:
cyl_bessel_j(0, NTL::RR(2)); cyl_bessel_j(NTL::RR(2), 3); cyl_bessel_j(NTL::quad_float(2), NTL::RR(3));
在最後一種情況中, quad_float 可以轉化為 RR類型,但反過來卻不可以,因此結果為 NTL::RR類型。注意,假定我們在使用patched NTL library.
選擇這些規則是為了與ISO/IEC 9899:1999 Programming languages - C 和Draft Technical Report on C++ Library Extensions, 2005-06-24, section 5.2.1, paragraph 5相兼容。