黑客与画家

编程是一种艺术创作

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

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

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

在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说,一点都不简单。 单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试 记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试,多年以后,他已经称为了一名很出色的程序员。每次聚会他都会告诉我,“那次面试彻底改变了我的过去的学习方式,我以前 只是盲目接受知识,根本就没有自己思考过,那次对话,比我大学四年学到的知识都多”。 我看他简历上写到读过《信息论》才谈了很多关于二分法以及编码的话题,整个过程大概3个小时——这是我面试时间最长的一次。 因为时间久远,我把一些我能回忆起来的关于浮点数的内容整理在这篇博客中。 格式说明: 所有我说的话,都放在引用里面。他的话放在了引号(“”)里面。没有加引号的是我的心理活动或者说明。