Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中以撇号结尾的数学函数是什么?_Clojure_Functional Programming_Lisp_Clojurescript - Fatal编程技术网

Clojure中以撇号结尾的数学函数是什么?

Clojure中以撇号结尾的数学函数是什么?,clojure,functional-programming,lisp,clojurescript,Clojure,Functional Programming,Lisp,Clojurescript,有些数学函数以撇号结尾,如:+'、*'和-' 非撇号和撇号有什么区别?它们是普通数学函数的“自动升级”版本 user> (* Long/MAX_VALUE 2) ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Numbers.java:1501) user> (*' Long/MAX_VALUE 2) 18446744073709551614N 如果输出太大,它们将返回比输入更

有些数学函数以撇号结尾,如:
+'
*'
-'

非撇号和撇号有什么区别?

它们是普通数学函数的“自动升级”版本

user> (* Long/MAX_VALUE 2)
ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1501)
user> (*' Long/MAX_VALUE 2)
18446744073709551614N
如果输出太大,它们将返回比输入更大的数据类型。 这曾经是Clojure早期的默认行为,然后它被更改为在数学运算的输出溢出其数据类型时引发异常。这提高了数值性能,通常有助于发现错误。在此后的五年左右的时间里,令人惊讶的是,很少有人抱怨这一变化破坏了任何东西。决定保留在溢出时抛出异常的行为,因为这几乎总是一个bug

在实践中,大多数情况下,您将知道何时需要使用大整数和大小数,并且可以对这些数据类型使用普通函数

user> (* Long/MAX_VALUE 2N)
18446744073709551614N
在这个例子中,我使用了普通的
*
函数,并向它传递了一个BigInteger类型的参数(这就是
2N
中的
N
对clojure阅读器的意义)

在一些情况下,您确实需要在不事先知道任何尺码的情况下使用任何尺码,这些功能会派上用场。到目前为止,对我来说,这些示例中的大多数都是关于StackOverflow的阶乘示例

如果确实希望数学操作溢出,则可以使用显式不安全的数学函数:

user> (unchecked-add Long/MAX_VALUE 2)
-9223372036854775807

典型答案。准确且非常彻底。要完成:还有
*未检查的数学*
,可以设置为
true