手机计算器全部阵亡,试试这个看看

今日曝出一条新闻:手机计算器全部阵亡:10%+10%不是0.2,错成了0.11了。我赶紧拿出了我的华为计算器验证了一下,果然错成0.11了。又试了一下50+50%=75,啊???

其实换一种理解方式,先换一个场景一说你就明白了:股票50元,上涨50%,是不是75元。

M+N%解释为:在基数M的基础上上涨N%,在某个时代部分程序员写计算器时是这样理解的。但是在C/C++/JAVA等等编程语言里面,%解释为格式符或者取余数操作,直接写 50+50%是会编译错误的,编译器自身都无法解释语法,不属于该语言可接受的语法,二义性无法消除。所以应该还是人类理解方式的问题了。纯应用层面的东西,由应用时的实际场景去的理解和处理,其实两种理解方式在两种场景下去看都是对的。

如果是换到我们正常生活中来,在高考考试中,你会怎么做?如果按照这样的理解去解释,那么上面就不对了,这种场景下,属于是代码里面把运算符结合优先顺序搞错了,属于程序员犯的低级错误。

如果在计算器上直接输入如下长算式:tan(45)*sin(30)*Log10(1000)*(((5π-65)*50%)/sin(30)*log10(100)+(56+45%)*5.58)*(5+7)+8555*(50*50/62/60)

那结果又会是什么样的了?我在2005年的时候写了一个计算器(PC版),已经实现了这个强大的功能。手工输入任意算式均可计算。

界面如下:

手机计算器全部阵亡,试试这个看看

其实程序逻辑还是很复杂的。

主要用到知识:

1、编译原理的后序表达式

2、数据结构的栈

3、运算符优先级。

如果你自己来写一个的话,试试你要多久?


分享到:


相關文章: