asuerhao's Blog

如果有什么做的不到的地方请尽管留言, 我会改进的 : )

Linux 命令行下的计算器

asuerhao posted @ 2012年3月31日 18:08 in 积累 with tags 计算器 , 7548 阅读

1. bc

  支持简单变量(simple variable)和数组(array), 支持算数运算, 赋值, 关系运算, 逻辑运算, 支持函数和控制结构。

  bc内建了四个特殊变量:

         scale, 精确到小数点后面多少位;

         ibase, 输入数据的进制;

         obase, 输出数据的进制;

         last, 最近打印的变量值.

  调用bc时添加-l选项, 会载入数学函数库, 提供一下函数:

        s (x)  The sine of x, x is in radians.

        c (x)  The cosine of x, x is in radians.

        a (x)  The arctangent of x, arctangent returns radians.

        l (x)  The natural logarithm of x.    

        e (x)  The exponential function of raising e to the value x.

         j (n,x)  The Bessel function of integer order n of x.

示例:

$  #进制转换

$  echo 'obase=16; 255' | bc

$  FF

$  #数学函学运算

$  echo 'scale=10; 4*a(1)' | bc -l

$  3.1415926532

 

2. Awk

  Awk本是专门用来处理文本的, 但它同时提供了一些基础的数值函数, 如:

     atan2(y, x)  返回y/x的正切值;

     int(x)  返回x的整数部分;

     srand(x)  设置虚拟随机产生器的种子;

     rand()  返回平均分布的虚拟随机数r, 0<=r<1;

     sin(x), cos(x), exp(x), log(x), sqrt(x).

  Awk支持标量变量, 数组变量, 赋值, 算数运算, 逻辑运算, 函数和控制结构, 可构造复杂的运算过程.

示例:

$  #计算阶乘

$  awk  'function fact(n) {\

                   if(n<=1) return 1;\

                   return(n*fact(n-1));\

               }\

               BEGIN { print fact(3); }'

$  6

 

3. Perl

  Perl是一门高级的脚本语言, 他内建了一些基本的数学函数, 如果对运算有更高要求的话, 可以引入相应模块:

      Math::BigInt - 大整数和大浮点数运算

      Math::Complex - 复数运算

      Math::BigFloat - 大浮点数运算

      Math::BigInt::Calc - Pure Perl module to support Math::BigInt

      Math::BigInt::CalcEmu - Emulate low-level math with BigInt code

      Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed

      Math::Trig - 三角函数

      Math::BigRat - 大有理数运算

  示例:

$  #打印PI

$  perl -w -e 'use Math::Trig; print(pi, "\n")'

$  3.14159265358979

 

4. Ruby

  Ruby是一门高级的面向对象的脚本语言, 她的Math模块定义了常量PI和E、一些三角函数和对数函数的方法及一些杂类方法。Math的方法都是“模块方法”, 它们可以通过Math这个命名空间来调用, 或者被其它类包含后像全局函数一样使用. Ruby标准库中的一些其它类也能帮助您完成一些复杂的任务:

    BigDecimal类: 用于代替Float, 当进行金融运算时, 可避免二进制浮点运算所带来的舍入误差;

    Complex类: 可以表示和操作一个复数;

    Rational类: 可以表示一个实数, 它定义了实数的算数运算操作符;

    Matrix和Vector类: 向量和矩阵运算;

    全局函数Kernel.rand: 产生随机数;

    Time类: 表示日期和时间.

  示例:

$ #打印PI和E

$  ruby -e 'printf( "Pi= %f, e= %f\n", Math::PI,Math::E)'

$  Pi= 3.141593, e= 2.718282

 

5. Python

  Python也是一门高级的面向对象的脚本语言. Python内置了一些基本的数学函数, 可以直接调用:

      abs(x): 返回x的绝对值;

      complex([real[, imag]]): 创建值为 real+imag*j的复数;

      divmod(a, b): 作除法;

      pow(x, y[, z]): 返回x**y, 或x**y%z;

      round(x[, n]): 根据给定精度进行四舍五入;

      sum(sequence[, start]): 对序列sequence求和, 如果存在参数start, 则再加上start.

  同时, Python标准库中也提供了大量的数值运算模块:

      numbers模块: 数值基本类;

      math模块: 数值运算;

      cmath模块: 复数运算;

      decimal模块: 定点和浮点函数运算;

      fractions模块: 有理数运算;

      random模块: 生成伪随机数.

示例:

$  #计算乘方

$  python -c 'print(pow(2, 3))'

$  8

Avatar_small
依云 说:
2012年3月31日 18:35

怎么没有 zsh 呢?

zmodload zsh/mathfunc
echo $(( sin(2) ))

libm 中的函数都可以用的哦(pow 除外;使用 **)。

Avatar_small
依云 说:
2012年3月31日 18:36

嗯,Perl 和 Ruby 都有了,却没有 Python。

Avatar_small
asuerhao 说:
2012年3月31日 18:46

@依云: 一直都是在用Bash的, 只是听说Zsh很强大,这次学习了


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter