跳转至

2024

🍺 Free as in free speech, not as in free beer

什么是自由软件?

什么是自由软件

What is Free Software? 🔗

四项基本自由

如果一个软件是自由软件,那么它必须为用户提供以下四项基本自由:

  • 自由度 0:无论用户出于何种目的,必须可以按照用户意愿,自由地运行该软件。
  • 自由度 1:用户可以自由地学习并修改该软件,以此来帮助用户完成用户自己的计算。作为前提,用户必须可以访问到该软件的源代码。
  • 自由度 2:用户可以自由地分发该软件的拷贝,这样就可以助人。
  • 自由度 3:用户可以自由地分发该软件修改后的拷贝。借此,用户可以把改进后的软件分享给整个社区令他人也从中受益。作为前提,用户必须可以访问到该软件的源代码。

Intel x87 FPU 浮点数运算性能异常分析

浮点数乘法的性能异常

在《数据结构基础》课程 Project 1 中,我们需要评估一段计算幂运算代码的运行耗时,以此分析它的时间复杂度。幂运算的算法相对比较简单,下面是一段示例代码:

double pow(double init_val, uint64_t iteration) {
  double mx = init_val;
  for (uint64_t i = 1; i < iteration; i++) mx *= init_val;
  return mx;
}

从代码中我们可以推出其运行时长应该只与 iteration 变量线性相关,对应该算法复杂度为 \(O(N)\).

然而一部分同学在进行实验时,发现这段代码的运行耗时不仅与幂次方有关,还与底数 init_val 有关。更具体而言,当底数比较大时,性能会发生骤降,比如计算 \(1.5^n\) 会比 \(1^n\) 慢十几倍。

在讨论过程中,同学们初步推断出,由于幂函数增长速度很快,计算较大底数时,很快就会超过 double 类型能表达的数字上限,此时结果将会变为 inf。因此问题的本质不在于底数的选择,而在于运算过程中是否发生了上溢 (overflow) 的问题,如果发生了上溢,那么性能就会骤降。

Blectchley Park 游记

布莱切利公园(Bletchley Park)曾是著名数学家和密码学家艾伦·图灵(Alan Turing)工作和研究的地方。在第二次世界大战期间,图灵和他的团队在这里成功破译了纳粹德国的恩尼格玛密码,为盟军的胜利做出了巨大贡献。如今,布莱切利公园内设有英国国家计算机博物馆,展示了德军使用的 Enigma 加密机以及图灵设计的 Bombe 解码机及其他计算机史上的重要成就。这一历史遗址见证了英国在计算机科学领域的重要贡献,吸引着世界各地的游客前来参观和了解这段辉煌的历史。

2024 年 8 月,我有幸来到布莱切利公园,参观了英国国家计算机博物馆,这篇博客主要是流水账式的记录.