2016-10-03 76 views
3

Num模塊,這是說:表示無窮大的Num模塊中

號(類型NUM)是任意精度有理數,加上特殊元素1/0(無窮大)和0/0 (不確定)。

我希望找到這個infinity,但找不到它。我猜的話,我可以手動創建它:

let infinity = let one = Int 1 and zero = Int 0 in one // zero 

但流浪漢:

例外:失敗 「create_ratio無限的或不確定的有理數」。

因此,好的,在普及的有這val infinity : float,讓我們來找一個num_from_float。哦,沒有這樣的功能...

那麼,有沒有人知道如何用Num表示正面和負面的無限?

回答

3

默認情況下,特殊數字被禁用。該行爲可以使用Arith_status模塊進行控制。例如,允許零個分母,使用以下命令:

Arith_status.set_error_when_null_denominator false 

一旦設置了標誌,你的無窮定義正常工作:

let infinity = let one = Int 1 and zero = Int 0 in one // zero;; 
val infinity : Num.num = <num 1/0> 
float_of_num infinity;; 
- : float = infinity 
+0

我的問題是,那麼,爲什麼說是「inifinity 「和」未定義「如果默認情況下不允許存在?無論如何,很好的答案! – Lhooq

+1

也許他們應該在Num的文檔中提供一些與Arith_status模塊相關的行爲...... – Lhooq

+1

是的,一個很好的問題......但我希望我有一個答案。可能,開發人員認爲特殊數字會導致更多問題而不是解決問題。例如,當我廣泛使用浮動工具時,我曾經打開'Float.Safe'模塊來覆蓋所有操作並失敗,如果有任何特殊數字出現的話。它在調試中幫了我很大的忙。是的,應該明確更新文檔,而不是潛伏在代碼中,要找出哪裏出錯是不容易的。 – ivg