计算之魂课后题
01-如果通过指令的控制,把一副扑克牌变成一种简单的计算机
可以把扑克牌组装成类似算盘的样子,然后使用算盘的口诀就可以当成一种计算机了。
02-利用 “与非” 运算实现布尔代数中的与或非
首先我们得知道与非运算是什么:
# NAND 表示与非运算
# 前者表示 x ,后者表示 y
1 NAND 1 = 0
0 NAND 0 = 1
1 NAND 0 = 1
0 NAND 1 = 1
这就是与非运算的全部内容,接下来我们来解答一些什么是布尔运算中的与或非
# 前者 x 后者y
非: !1 = 0 !0 = 1
与: 1 && 1 = 1
或 1 || 0 = 1 ; 0 || 1 = 1 ; 1 || 1 = 1
所以我们知道了这两者的核心思想,就可以进行一种等价化,或者说一种映射
# 使用 NAND 表示 非
# 要求是输入的参数x,1 那么就输出0,0那么就输出1 ,这里的1 0 以及上文下文的都分别表示 true和false或者阴阳都可以。
非 = x NAND x
# 使用 NAND 表示 与
# 表示输入的俩数据都是 11 的时候出现的也是1 ,01 10 00 不符合
与 = (x NAND y) NAND (x NAND y)
# 使用 NAND 表示 或
# 输入的是10 01 11 的时候符合,00 不符合
或 = (x NAND x) NAND (y NAND y)
03-如果计算的本质是机械运动,那么信息处理和能量就存在一个对应关系,比如,我们可以计算一下1946年的 ENIAC 消耗一度电 (1 千瓦时) 能完成多少次的计算,今天的华为 mate40 pro 手机消耗 1 度电能完成多少次的计算
功率:描述单位时间内的做功 能量:单位事焦耳,表示做的功 工作频率:表示单位时间内完成工作的次数,单位事 hz (秒分之一)
- eniac 的基础情况是这样的,功率是 150kw,计算速度是 5000 次/s
- 麒麟 9000 的巅峰功率是 9w,巅峰的主要核心频率是 3.13hz
1 千瓦时 = 1 kwh = 1000w * 3600 s = 3.6e6 (焦耳)
eniac 的功率是 150kw,这就意味着1秒钟它消耗的能量是 150 1000 1 = 1.5 e5 (焦耳),每秒钟是 5000 次,那么每秒钟,一次需要消耗 1.5e5/5000 = 30(j),那么一度电,可以完成的次数就是 3.6e6/30 = 1.2e5 次
麒麟 9000:功率是 9w,一秒钟消耗能量是 9 1 = 9 (焦耳),每秒钟的次数是 3.31e9 次,那么一秒钟消耗的能量是 9/3.31e9 (焦耳),那么一度电完成的计算次数是 3.6e6 /9 3.31e9 = 1.324e15 次
这里要说明一下,这个数值不准确,因为我们只看了麒麟 9000 的一个核心,它出了这个之外还有 7 个核心没有计算,以及 npu,gpu,基带芯片等
04-在数字计算机之前曾经出现过模拟计算机,如何证明后者等价于前者的某个子集
//todo https://zhuanlan.zhihu.com/p/470434381 这里有一个解题思路
一个思路是这样,模拟计算机只能作为专用计算机,那么专用计算机必然是通用计算机的一个子集
11-世界上还有什么产品是类似计算机的,是软硬件分离的?
一个古董和它身上的历史意义
如果一个程序只能运行一次,在编写它的时候,你是采用最直观但是效率低的算法,还是依然寻找复杂度最优的算法?
只能运行一次的话,得看重要性以及数量级,如果数量级很低,重要性又很差的话,直接写一个最简单的即可。但是如果是运行在关键的部位,并且数量级非常高的话,那么肯定是要使用最优的算法了。