Categories

Calendar

January 2022
M T W T F S S
« Jun    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

你用什么计算器?

abacus我自己的口算能力非常弱,不过我相信就算是口算能力比较强的人偶尔也会需要借用一下工具吧。计算机号称有通用计算能力,像我们这样大部分时间都在电脑前的人通常都会优先考虑电脑上的计算工具吧。其实这样的工具通常都是偶尔拿来用用,甚至是能找到什么就用什么了,并不会去太在意它们,不过昨天我看到了一篇比较有趣的 blog ,觉得果真是大千世界,无奇不有,大家平时用的计算工具也真是千奇百怪。

然后我就开始回想自己都用些什么工具了。最开始自然是 Windows 自带的那个计算器了。不过那个东西的确是比较弱,明明是电脑软件,却非要去模拟计算器的界面和操作方式,不过我觉得它那个进制转换的功能确实不错。后来就乱七八糟地用一些,包括从网上下载的有各种杂七杂八的功能(比如单位转换)功能的所谓“超级计算器”之类的,也有直接在 Google 搜索框里计算的。

上大学学了 C 语言,学高等代数的时候要算多项式、矩阵之类的,干脆自己写程序来算,虽然比较费力,不过也算开心。后来用上了 Emacs ,虽然听说里面那个计算器无比强大,但是尝试过好几次都没有弄明白到底怎么用的。倒是 Linux 下的那个 bc 让我非常喜欢,任意精度的计算器,可以使用函数、变量,并且是命令行工具,小巧方便,当然,也可以进行进制转换,只要设置 ibase 和 obase 就可以了。不过这里有一个比较整人的地方:你最好先设置 obase 再设置 ibase ,否则,例如,你先设置了 ibase 为 16 ,再输入命令 obase = 10,你本意是想让它十进制输出,但是实际上这里 ibase 已经设置成 16 了,你输入的 10 已经是十六进制的了。 ^_^

一直都很喜欢 bc ,不过现在如果电脑上有装 Ruby 的话,我肯定会优先选择 irb 的。别的语言特性不说,但是如果作为方便的计算器的话,Ruby 绝对比 Python 要好用。比如进制转换(四进制到七进制):

'123'.to_i(4).to_s(7) # => 36

我也不清楚为啥我老是要做进制转换,但是印象中确实是这样。还有一个比较常用的东西是随机排序,比如这里有这些活,怎么分配到每个人身上呢?通常就是抽签,其实就是每个人给一个编号随机排序一下了:

(1..5).sort_by { rand } # => [5, 3, 2, 4, 1]

当然这已经不能严格地算是一个计算器的功能了。 ^_^

不过我确实是昨天才在这篇 MSDN blog 上得知 cmd.exe 的 set 命令有一个 /A 选项可以用来完成“32 位带符号整数运算”,后面的评论有人贴出了这样一个“bug”:

C:\>set /a 50000*50000
-1794967296

并抬出了 Python 。不过这样地挑刺实在是没有技术含量,因为人家已经说明了是“32 位带符号整数运算”了。相比之下,另一位老兄就有趣得多,他用 cmd.exe 的这个功能写了一个计算 \pi 的批处理,代码接近 200 行。这才是 geek 啊!

那么,你又是用什么东西来做计算的呢?不会随身挂一个金算盘吧? :D

13 comments to 你用什么计算器?

  • rhythm

    calc、TypeAndRun、Python都很常用。其实calc如果熟悉了键盘操作的话也很方便,F5、F6、F7、F8分别是十六、十、八、二进制转换。

  • @rhythm
    恩,对于鼠标一直处于损坏状态还能正常用电脑的人,我只有仰慕的份了……

  • saturday

    windows用一个叫speq的软件,感觉还不错~

  • galilette

    最常用的还是bc -l, 主要是所有服务器上都有

  • galilette

    btw, 我们学校规定网上贴学生分数不能用学生证, 所以TA每个学期开头都要给班里的学生分配一个号码. 那个sort_by{rand}就很管用

  • @galilette
    恩,在 Matlab 里的话,直接用 randperm 就可以得到一个随机序列了。经常要取一组数据中的一个随机子集,一个办法就是得到一个随机序列然后直接取前 k 个作为 index 得到一个大小为 k 的子集。虽然看起来有点低效,不过一时也没有想到其他简单一点的办法了。

  • 圆圆

    今天一个阿三小朋友发邮件来说,Microsoft’s Calculator Failed in following calculation:
    2704/51 = 53.01960784 Works Fine
    2704/52 = try yourself Doesn’t Work
    2704/53 = 51.01886792 Works Fine
    But how comes?

  • @圆圆
    好像听说过这个 bug/彩蛋,不过我在一台 Server 2003 上试了一下是正常的。

  • 圆圆

    @pluskid
    可是因为52^2=2704,那怎么知道这是个bug呢~

  • @圆圆
    猜测吧,这种计算器做算数运算肯定都是调用底层的功能直接做的吧,甚至最后直接是 CPU 的浮点运算单元在做,所以一般不会有这种问题,只有猜测是在上面的程序中有非常低级的错误或者故意弄的吧。

  • 圆圆

    @pluskid
    o,今天坐校车来着,感觉可神圣啦

  • 还是bc -l比较好用

  • ubuntu下的gnome界面的gcalctool非常好用

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>