保留小数值的命令行计算器


11

我只是找到了一个很好的命令行计算器程序bc,并且对它感到满意,直到我发现它舍入了小数位,从而导致精度下降。

根据其man页面:

所有数字内部均以十进制表示,所有计算均以十进制表示。(此版本截断除法和乘法运算的结果。)

您能为Ubuntu Maverick 建议一个等效的bc吗?我需要使用变量进行高级命令行计算。

Answers:


13

您可以使用设置小数部分的长度scale=n

该命令echo 'scale=20;752/447' | bc产生:

1.68232662192393736017

请注意,即使数字适合刻度,也可能会附加其他零:

scale=20
1/2
.50000000000000000000

不幸的是,总是存在一个四舍五入的问题:

scale=50
1/3*3
.99999999999999999999999999999999999999999999999999

可以将比例值设置为全局值,还是应该始终在启动bc时显式设置它?
sergionni 2011年

1
@sergionni:您应该始终将scale变量传递给bc。唯一的环境变量可能是有用的BC_ENV_ARGS。该变量bc带有一些参数,您可以使用标准变量或设置创建一个文件,然后设置BC_ENV_ARGS=/path/to/variables/file。请阅读手册页
Lekensteyn 2011年

我倾向于通过开始BC bc -ql-q隐藏版权标语(通常证明会分散注意力)并-l加载数学库,并自动将标度设置为20。(请参阅man bc。)
i336_

9

calc(我相信来自package apcalc)与相同bc,但不舍入。它的显示方式bc与相似,但与有所不同bc,它理解科学计数法。例:

> calc
C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; a=234
; b=a/7
; b
    ~33.42857142857142857143
; c=b/1e20
; c
    ~0.00000000000000000033
; c*1e10
    ~0.00000000334285714286
; 

bc

> 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'. 
a=234
b=a/7
b
33.42857142857142857142
c=b/10^20
c
.00000000000000000033
c*1e10
(standard_in) 6: syntax error
c*10^10
.00000000330000000000

稍作搜索就会发现很多结果,但并非所有结果都是相关的,但是我敢肯定,通过一些试验,您可以确切地找到想要的结果(例如wcalc):

aptitude search calc
i   apcalc                               - Arbitrary precision calculator (original name: calc)
i A apcalc-common                        - Arbitrary precision calculator (common files)
p   apcalc-dev                           - Library for arbitrary precision arithmetic
p   bandwidthcalc                        - file transfer time calculator written in GTK+
p   calcoo                               - Scientific calculator (GTK+)
p   calcurse                             - text-based calendar and todo manager
p   concalc                              - console calculator
p   extcalc                              - multifunctional scientific graphic calculator
p   gcalcli                              - Google Calendar Command Line Interface
i   gcalctool                            - GNOME desktop calculator
p   ipcalc                               - parameter calculator for IPv4 addresses
p   ipv6calc                             - small utility for manipulating IPv6 addresses
p   kcalc                                - calculator for KDE 4
p   keurocalc                            - universal currency converter and calculator - binary package
p   keurocalc-data                       - universal currency converter and calculator - data package
p   lcalc                                - a program for calculating with L-functions
p   libcolor-calc-perl                   - Perl module for simple calculations with RGB colors
p   libdate-calc-perl                    - Perl library for accessing dates
p   libdate-pcalc-perl                   - Perl module for Gregorian calendar date calculations
p   libmath-basecalc-perl                - Convert numbers between various bases
p   libmath-calc-units-perl              - Human-readable unit-aware calculator
p   libmath-calculus-differentiate-perl  - Algebraic Differentiation Engine
p   libmath-calculus-expression-perl     - Algebraic Calculus Tools Expression Class
p   libmath-calculus-newtonraphson-perl  - Algebraic Newton Raphson Implementation
p   libticalcs-dev                       - Texas Instruments calculator communication library [development files]
p   libticalcs2-7                        - Texas Instruments calculator communication library
p   libwww-google-calculator-perl        - Perl interface for Google calculator
p   octave-physicalconstants             - provide physical constants values in Octave
i   openoffice.org-calc                  - office productivity suite -- spreadsheet
v   openoffice.org2-calc                 -
p   python-ipcalc                        - perform IP subnet calculations
v   python2.6-ipcalc                     -
p   r-cran-epicalc                       - GNU R Epidemiological calculator
p   rpncalc                              - RPN calculator trying to emulate an HP28S
p   science-numericalcomputation         - Debian Science Numerical Computation packages
p   sipcalc                              - Advanced console-based ip subnet calculator
p   subnetcalc                           - IPv4/IPv6 Subnet Calculator
p   sugar-calculate-activity             - calculate activity for the Sugar graphical shell
p   tapecalc                             - a full-screen tape editor that lets the user edit a calculation
p   transcalc                            - microwave and RF transmission line calculator
p   wcalc                                - A flexible command-line scientific calculator
p   wmcalclock                           - A dock.app which simply tells time and date
p   xsmc-calc                            - Smith Chart calculator for X

9

我建议使用Python作为命令行计算器:

$ python
>>> from math import *
>>> help(sin)
    sin(x)

    Return the sine of x (measured in radians).

我也建议使用IPython或IDLE。两者都极大地提高了标准外壳的可用性。

更新:使用python3避免截断意外:

$ python2.7

>>> 10/3
3

$ python3

>>> 10/3
3.3333333333333335

有史以来最好的计算器。你什么都可以做。
Owais Lone

2
这也会截断计算。
daithib8'7

如果您进行如下除法运算,它将不会截断任何内容:2.0 /100。当然2/100等于0,因为它是整数除法。
2015年

6

在这种意义上,您失去了精度:如果将precision设置为10个十进制数字,则除法将被截断为10个十进制数字,这是一个连贯的选择。

如果您要寻找一个精确的计算器,则需要一个符号系统maxima

顺便说一下,bc支持变量。


是的,我知道它支持变量,那就是我要模拟信号
sergionni 2011年



1

如果已octave安装,则可以在命令行中以如下方式使用它:

octave --silent --eval 752/447

为了缩短写作时间,您可以在其中添加以下内容作为别名 .bashrc

alias ose='octave --silent --eval'

然后称为ose 752/447。别名/快捷方式是任意的,但是您需要重新启动终端才能使其生效。

您可以octave使用以下方法进行安装:

sudo apt-get install octave

当然,octave您也可以使用其中所有可用的高级功能。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.