代码改变世界

随笔档案-2012年11月16日

代码之谜(五)- 浮点数(谁偷了你的精度?)

2012-11-16 17:03 by justjavac, 1779 阅读, 收藏,
摘要: 如果我告诉你,中关村配置最高的电子计算机的计算精度还不如一个便利店卖的手持计算器,你一定会反驳我:「今天写博客之前又忘记吃药了吧」。你可以用最主流的编程语言计算0.2 + 0.4,如果你使用的是 Chrome、FireFox、IE 8+,可以按 F12 键,然后找到 「控制台」,输入上面的表达式0.2 + 0.4,回车。然后再用最简陋的计算器(如果你没有手持计算器没关系,手机、电脑都自带一个计算器,打开“运行”,输入calc,回车) 再计算一下刚才的算式0.2 + 0.4。怎么样?同意我的观点了吧!再简陋的计算器也比超级计算器的精度高,关键不在于它的频率和内存,而在于它是如何设计、如何表示、如 阅读全文

千万不要把 bool 当成函数参数

2012-11-16 12:56 by justjavac, 3709 阅读, 收藏,
摘要: 我们有很多 Coding Style 或 代码规范。 但这一条可能会经常被我们所遗忘,就是我们经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性。 不信?我们先来看看下面的代码。当你读到下面的代码,你会觉得这个代码是什么意思?widget->repaint(false);是不要 repaint 吗?还是别的什么意思?看了文档后,我们才知道这个参数是 immediate,也就是说,false 代表不立即重画,true 代码立即重画。Windows API 中也有这样一个函数:InvalidateRect,当你看到下面的代码,你会觉得是什么意思?InvalidateRect(h 阅读全文

代码之谜(四)- 浮点数(从惊讶到思考)

2012-11-16 11:30 by justjavac, 1038 阅读, 收藏,
摘要: 在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。一次面试记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为了一名很出色的程序员。 每次聚会他都会告诉我,“那次面试彻底改变了我的过去的学习方式, 我以前只是盲目接受知识,根本就没有自己思考过, 那次对话,比我大学四年学到的知识都多”。我看他简历上写到读过《信息论》才谈了很多关于二分 阅读全文

代码之谜(三)- 运算符

2012-11-16 08:22 by justjavac, 1913 阅读, 收藏,
摘要: 从最简单的运算符加号(+)说起,加号(+)是个二元运算符——也就是说,加号只把两个数联接起来,从来不把第三个或者更多的联接起来。因此,“1加2加3” 在计算机中被表述为:(1 + 2) + 3 // a或者1 + (2 + 3) // b虽然我们通常写做1 + 2 + 3,但是并不意味这它和我们数学中的 1+2+3 是等价的。那么数学中的 1+2+3 到底表示的是 a 呢,还是 b 呢?如果计算机的求值是左结合的,那么此表达式等价于第一种a; 如果是右结合的,那么此表达式等价于第二种b。1 + 2 + 3简单的理解就是 “把1、2、3加在一起”, 确实,在我们接触到的数学里... 阅读全文
无觅相关文章插件,快速提升流量