直流计算对数

Bri*_*hon 4 unix logarithm dc

我已经看到了bc的这个问题,但是你怎么在直流中做到这一点?例如,如果命令是q,我想像这样使用它:

10k
5q2q/
Run Code Online (Sandbox Code Playgroud)

要计算log_2(5).

eus*_*h77 8

这里没有内置命令dc,但您可以实现任何用于将对计算为宏的数值方法.

例如,这个ln(x)使用ln((1+y)/(1-y))泰勒级数展开计算:

# L (x -- y)
# Natural logarithm of `x`.
[ 1-d2+/
  d2*Sk              # Initialize multiplier
  d*Sy               # Initialize multiplier factor
  0Ss                # Initialize accumulator
  10K^Sp             # Initialize 10^k power
  [ d1r/lk*ls+lsrdss   # Update accumulator
    -lp*d*1 [s_q]s_>_  # Check precision
    lkly*sk 2+         # Update multiplier and counter
    lfx
  ]Sf
  1lfxLs
LkLyLpLfs_s_s_s_] sL
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

10k
5lLx 2lLx /p
Run Code Online (Sandbox Code Playgroud)

它不是最优的,特别是对于大数(x >> 1),但如果需要,也可以通过这种方式实现具有更快收敛的方法.

挤压版(稍快):

[1-d2+/d2*Skd*Sy0Ss10K^Sp[d1r/lk*ls+lsrdss-lp*d*1[s_q]s_>_lkly*sk2+lfx]Sf1lfxLsLkLyLpLfs_s_s_s_]sL
Run Code Online (Sandbox Code Playgroud)