unix 如何用bc计算一个数的对数?

rqcrx0a6  于 2023-03-12  发布在  Unix
关注(0)|答案(8)|浏览(163)

我想计算一个数字的对数(以10为底),如何使用bc来完成?

cyej8jka

cyej8jka1#

使用-l选项调用bc(以启用数学库),如下所示:

$ echo 'l(100)/l(10)' | bc -l
2.00000000000000000000

使用l函数,它是一个自然对数函数,取你感兴趣的数字的自然对数,然后除以自然对数10。

kpbpu008

kpbpu0082#

给定任意以k为底的对数函数,就可以计算x以b为底的对数--这真的很酷!

log_b(x) = log_k(x) / log_k(b)

例如:

log_b(x) = ln(x) / ln(b)

如果B=10:

log_10(x) = ln(x) / ln(10)

并且bc中的-l启用数学库
这就是为什么它能起作用

# bc -l
l(100) / l(10)
2.00000000000000000000
xggvc2p6

xggvc2p63#

如果你用-l开关来启动bc,那么就有一个函数l()来计算它的参数的自然对数。

j9per5c4

j9per5c44#

bc不会直接给出对数,除非用except或其他方法,使用bc,我们只能计算ln(x)。因此,要得到其他的底对数,记住一些恒等式是明智的。

log base 10 (x) = log base e (x) / log base e (10)

我在这里给你们一些不同的基对数的例子-

totan@Home-Computer ~ $ bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

l(8)/l(2)
3.00000000000000000002

l(1000)/l(10)
3.00000000000000000000

l(100000)/l(100)
2.50000000000000000000

l(100000)/l(10)
5.00000000000000000001

l(81)/l(3)
4.00000000000000000001

l(64)/l(4)
3.00000000000000000000

quit()
totan@Home-Computer ~ $

希望这对你有帮助。

db2dz4w8

db2dz4w86#

海报特别要求日志10。
我在Ubuntu 12.10上有bc 1.06.95。在这个版本的BC中,“l(x)”不是以10为底的。它是自然对数(以e为底)。这在这里得到了证实,BC已经这样工作了一段时间:
http://linux.about.com/od/commands/l/blcmdl1_bc.htm
我猜想要使以10为底的对数工作,需要BC扩展:
http://x-bc.sourceforge.net/extensions_bc.html
不知道正确的方式来安装这个,并得到了错误,试图张贴在这里。
多米尼克-吕克·韦伯

bihw5rsg

bihw5rsg7#

正如许多其他人指出的那样,用-l选项调用bc将包括标准数学库,并通过扩展提供它们的功能。@dee指出了一些额外的扩展,这些扩展解决了我在计算log2()时遇到的问题,正是这些问题导致了我写这篇文章。但是可以通过在调用bc时包含文件来在运行时加载它们:

bc -l extensions.bc

如果要将此设置为默认行为,请在shell配置文件或.rc中将环境变量BC_ENV_ARGS定义为-l /pathToExtension/extensions.bc

nxowjjhe

nxowjjhe8#

由于bc -l只给出自然对数,因此您可以自己快速定义log函数:

define log(x) { return l(x)/l(10) }
log(10)
1.0000000

相关问题