Perl6 日志方法 returns a Num not a Rat
Perl6 log method returns a Num not a Rat
只是想知道是否有人知道为什么 Perl6 的日志函数 returns 是 Num 类型而不是 Rat 类型。
say (e*e).log.WHAT;
> (Num)
say (2/3).WHAT;
> (Rat)
在数学中,Log 是一个连续函数,因此它具有数学上的实数值。 Num
类型描述 Perl 6 中的数学实数。Rat
类型描述数学有理数。
Perl6 不是计算机代数系统,所以它对待 e*e
和对待其他任何东西一样 Num
- 一旦你得到一个浮点数,只有显式操作如舍入应该改变输入类似 Int
或 Rat
的内容:计算机无法知道 (e*e).log
的 return 值 2e0
实际上代表 2
,还是某些 2+ε
.
这是因为还没有人完成让它做任何其他事情的工作。这是一种语言可以处理的情况(不是它对 Perl 6 来说是特殊的),但也是一种您可能不希望它处理的情况。
没有代表自然基数 e
的对象并保持原样直到它不能再存在(就像 Rat
s 不会变成 Num
s除非他们必须这样做)。这是可能的,也让我们能够决定如何对待它。也许我们想要一个 Rat
,或 FatRat
,甚至 Num
中的某个小数位。但它不会那样做。
并不是说 e
很特别。它也不适用于 10 的幂:
> 100.log10
2
> 100.log10.^name
Num
.log10
后面的代码可以检查操作数是否为 10 的幂,并在这种情况下决定 return 和 Int
。但它必须为此检查每个数字,而且大多数数字不是 10 的幂。检查所有这些会减慢过程。做的稍微简单点"incorrect".
但是您可以使用 .narrow
来获得更受约束的类型:
> 100.log10.narrow.^name
Int
这不同于要求特定类型并可能得到不同的数字:
> (10/3).Int
3
> (10/3).narrow.^name
Rat
为了好玩:
> i*i
-1+0i
> (i*i).^name
Complex
> (i*i).narrow.^name
Int
只是想知道是否有人知道为什么 Perl6 的日志函数 returns 是 Num 类型而不是 Rat 类型。
say (e*e).log.WHAT;
> (Num)
say (2/3).WHAT;
> (Rat)
在数学中,Log 是一个连续函数,因此它具有数学上的实数值。 Num
类型描述 Perl 6 中的数学实数。Rat
类型描述数学有理数。
Perl6 不是计算机代数系统,所以它对待 e*e
和对待其他任何东西一样 Num
- 一旦你得到一个浮点数,只有显式操作如舍入应该改变输入类似 Int
或 Rat
的内容:计算机无法知道 (e*e).log
的 return 值 2e0
实际上代表 2
,还是某些 2+ε
.
这是因为还没有人完成让它做任何其他事情的工作。这是一种语言可以处理的情况(不是它对 Perl 6 来说是特殊的),但也是一种您可能不希望它处理的情况。
没有代表自然基数 e
的对象并保持原样直到它不能再存在(就像 Rat
s 不会变成 Num
s除非他们必须这样做)。这是可能的,也让我们能够决定如何对待它。也许我们想要一个 Rat
,或 FatRat
,甚至 Num
中的某个小数位。但它不会那样做。
并不是说 e
很特别。它也不适用于 10 的幂:
> 100.log10
2
> 100.log10.^name
Num
.log10
后面的代码可以检查操作数是否为 10 的幂,并在这种情况下决定 return 和 Int
。但它必须为此检查每个数字,而且大多数数字不是 10 的幂。检查所有这些会减慢过程。做的稍微简单点"incorrect".
但是您可以使用 .narrow
来获得更受约束的类型:
> 100.log10.narrow.^name
Int
这不同于要求特定类型并可能得到不同的数字:
> (10/3).Int
3
> (10/3).narrow.^name
Rat
为了好玩:
> i*i
-1+0i
> (i*i).^name
Complex
> (i*i).narrow.^name
Int