Nik*_*sMM 2 perl number-formatting
我有以下问题:我有许多值x,我需要计算x ^ e(e是euler的数字).我这样做:
$x = $x ** exp(1);
Run Code Online (Sandbox Code Playgroud)
这导致我的所有测试案例都"纳米".
但是,如果我在执行此操作之前打印$ x的值,然后取一个并将上面的行更改为:
$x = -12.4061063212051 ** exp(1);
Run Code Online (Sandbox Code Playgroud)
它会产生完美的数字.
谁能指出我在这里做错了什么?
谢谢
PS:也许错误隐藏在其他地方,所以这是我如何计算$ x:
$y = #some float value taken from the output string of another program
$x = ($y/(303 * 0.0019872041));
print $x; #prints number
$x = $x ** exp(1);
print $x; #prints "nan"
Run Code Online (Sandbox Code Playgroud)
Kar*_*ath 12
这都是关于运算符优先级的:
$x = -12.4061063212051 ** exp(1);
Run Code Online (Sandbox Code Playgroud)
是真的
$x = - (12.4061063212051 ** exp(1));
Run Code Online (Sandbox Code Playgroud)
正如所见
$ perl -MO=Deparse,-p -e'$x = -12.4061063212051 ** $e'
($x = (-(12.4061063212051 ** $e)));
-e syntax OK
Run Code Online (Sandbox Code Playgroud)
哪个好.
如果您尝试以下操作,它也会像您的程序一样失败:
$x = (- 12.4061063212051) ** exp(1);
Run Code Online (Sandbox Code Playgroud)
它应该,没有符合这个标准的实数.
小智 6
让我们暂时让事情变得更容易,并假设我们正在采取行动$x**2.5.好吧,既然如此2.5==5.0/2.0,我们有$x**2.5==$x**(5.0/2.0)==($x**0.5)**5.0.或者,换句话说,$x**2.5与第五种力量相同sqrt($x).
由于计算机默认情况下只会处理实数,所以如果说,你会怎么想$x==-1?
是啊....现在,如果有什么$x<0$,我们要采取$x**exp(1)(即Perl使用的十进制近似值exp(1)是2.71828182845905)?
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |