【问题标题】:Represent infinity in the Num module在 Num 模块中表示无穷大
【发布时间】:2016-10-03 12:50:29
【问题描述】:

Num 模块中是这样说的:

数字(num 类型)是任意精度的有理数,加上特殊元素 1/0(无穷大)和 0/0(未定义)。

我希望能找到这个infinity,但找不到。我猜,然后,我可以手动创建它:

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

但是流浪汉:

例外:失败“create_ratio 无限或未定义的有理数”。

所以,好的,Pervasives 中有这个val infinity : float,让我们找到一个num_from_float。哦,没有这个功能……

那么,有谁知道如何用 Num 表示正无穷和负无穷?

【问题讨论】:

    标签: ocaml infinity


    【解决方案1】:

    默认情况下,特殊数字被禁用。可以使用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
    

    【讨论】:

    • 我的问题是,如果默认情况下不允许存在“inifinity”和“undefined”,为什么会说它们存在?无论如何,很好的答案!
    • 也许他们应该在 Num 的文档中说明某些行为与 Arith_status 模块相关联...
    • 是的,一个很好的问题......不过,我希望我有一个答案。可能,开发人员认为特殊数字导致的问题多于解决的问题。例如,当我广泛使用浮点数时,我曾经打开 Float.Safe 模块,该模块会覆盖所有操作并失败,如果有任何特殊数字出现。它确实对我的调试帮助很大。是的,文档肯定要更新,不潜入代码,不容易找出问题所在。
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2019-03-19
    相关资源
    最近更新 更多