香蕉为什么能做随机数生成器?因为,它是水果界的“辐射之王”
程序员的成长之路
互联网/程序员/技术/资料共享
关注
阅读本文大概需要 5 分钟。
来自:杨净 丰色 发自 凹非寺
量子位 | 公众号 QbitAI
一个香蕉,竟然还能这么用?!
真·随机数生成器,项目已开源。
要知道,平日里用计算机生成的(比如Random()函数)都是可以预测的伪随机数。如果用来生成密码,不能保证绝对的安全。
于是乎,研究人员就开始从大自然中寻找随机数,比如大气噪声、量子力学、宇宙微波背景辐射。
那么香蕉,又是如何保证生成真·随机数的呢?
按照小哥的解释,就是先检测香蕉中的放射性物质衰变,经过简单算法处理后生成0-255范围的随机数。
等一下,似乎哪里不对?香蕉、放射性、辐射……
我吃了二十几年的香蕉,你跟我说这个??
水果界“辐射之王”
仔细研究了下发现,香蕉确实有辐射,而且还不小。
在水果界甚至还有着“辐射之王”的江湖称号。
核心原因是香蕉中富含的钾元素在作祟:100g香蕉含有约350毫克的钾。
目前天然存在的钾由三种同位素组成。其中只有少部分的原子核(约0.015%),即钾-40,具有放射性。
这些原子自发衰变,释放出能量分离出电子(β 射线)和伽马射线,从而对蛋白质orDNA等生物分子造成损伤,从而引发放射性疾病或癌症。
基于这样的原理,也就决定了香蕉属于是电离辐射,即核辐射。
嗯,世卫组织列为一类致癌物的那种。
但不用担心,要想达到真正的致死量,人类需要吃3500万根香蕉。
再加上,我们身体大约含有120g钾的天然成分,通过新陈代谢,会将钾的数量维持在一个恒定的水平。
钾-40想要在体内积聚,其实并不容易。
而为了更好地向大众科普辐射强度,物理学家们喜欢用它来做对比,就专门设计了个名词。
香蕉等效剂量,用来描述辐射强度的非正式单位。
一根香蕉的辐射剂量=0.0778微西弗(正式的计算单位);
胸部CT扫描=7万根香蕉等效剂量;
核电站对周边环境的最大允许辐射暴露=每年2500根香蕉等效剂量;
对了,还借此辟个谣。
一些旁友可能看过这样的论断:香蕉的辐射要比手机要高?!
事实上,这两者根本没有可比性。一个是电离辐射,另一个则是非电离辐射。
两者最大的区别,就是能量的高低,是否足以引起原子层面的变化,比如分离出电子。
△图源:国际原子能机构
非电离辐射,则是能量较低的那一挂,虽然不足以让原子或分子分离出电子,但可以让这些分子振动,产生热量。这也就是微波炉的工作原理。
一个香蕉+300多元的硬件
这回理解了,香蕉就是个天然的钾-40放射源。
利用钾-40放射衰变是完全随机的这一原理,就可以做成真随机数生成器。
既然如此,具体是怎么做的呢?
很简单。硬件上你只需准备一块Arduino开发板+一个盖革计数器。
这两者加起来只要300多块(板约40元,计数器约300元)。
盖革计数器全称盖革-米勒计数器(Geiger-Müller counter),从1928年开始就是一个专门用来探测电离辐射强度的记数仪了。
它涉及的算法非常简单,写一个主循环,让寄存器从0加到n,等于n时,寄存器重置为0。
一旦在这个过程中检测到装置上方香蕉中的钾-40衰变放射出粒子,主循环就暂停,执行中断程序,将寄存器中的最后一个值作为随机数返回,然后寄存器再重置为0,继续循环。
比如,我们可以让寄存器从0加到15,并用十六进制表示这几个数(0-15也就为0-9、A-F),因此两位十六进制数就可以组成1个字节的随机数了,最终可以得到十进制范围内0-255的任意数。
ps.一个十六进制比如6F转换成二进制数就等于0110 1111,一共有8位,而一个字节正好等于8位二进制数。
这就是一个香蕉随机数生成器的诞生。
以往要想获得真正的随机数,常见的做法就是将一些大自然的物理现象产生的随机量转化成数字信息。
比如电阻热噪声、半导体中的雪崩效应、电路混沌效应等。
还有人甚至会用到更为复杂的量子现象,比如散粒噪声、光电效应,以及宇宙微波背景辐射,也就是前面提到的放射性衰变。
现在,只需要一个香蕉、300多块的硬件就可以做成,简直不要太方便。
事实上,GitHub上其实已经有很多类似项目,推特上也有一个专门账号曾每天发200多个随机数坚持了一年。
原来香蕉不光只是可以吃呀
其实,有关香蕉的妙用还不止此。
比如,它可以成为游戏手柄。
就在今年,索尼申请了一项让人看起来觉得很有意思的专利,该专利立志把“便宜、简单、非电子的设备变为游戏外设”。
这不,他们就通过一些设备和技术把虚拟按键投射到了香蕉上,变成了手柄。
以及把两根香蕉通过扫描识别变成双摇杆,还能控制一些步行模拟器或飞行类的游戏。
再比如,香蕉还可以用来感受物理学科的神奇,即正电子。
因为钾-40在发生β+衰变为氩40时,会同时放出一个正电子。于是一位来自果壳的网友,提供了个方法:
买一根香蕉,捣烂涂在手上。
平均每1小时51分钟,就有一个正电子在你手上湮灭!”
嗯,感兴趣的旁友,可以试试。
当然,香蕉还可以作为平日里恶搞的工具。
准备个“香蕉+枣”,“香蕉+雪碧”等组合,会让你的旁友发现新世界。
而在虚拟世界中,香蕉也有你想不到的用处。
《杀手3》游戏中,它就被设定成了一种武器!便携又好隐藏,连子弹的攻击都不可击穿。
由此也成为了一个极其受玩家好评的“暗杀”工具,分分钟拍晕一个人高马大的基地守卫不说,一旦化身“地雷”,敌人踩到立马摔倒躺尸。
△ 图源游研社
(越来越离谱了哈。)
最后,别忘了,一个人和香蕉的基因也是有41%的相似性哦~(手动狗头)
参考链接:
[1]https://www.mcgill.ca/oss/article/you-asked/it-true-banana-radioactive
[2]https://www.iaea.org/zh/newscenter/news/shi-yao-shi-fu-she
[3]https://www.mcgill.ca/oss/article/you-asked/it-true-banana-radioactive
[4]https://mp.weixin.qq.com/s/KqcoIqotWNLIxyPwX-Y2tg
[5]https://github.com/gbonacini/nuclear_random_number_generator
[6]https://twitter.com/Hacksterio/status/1519118940810711040
<END>
推荐阅读:
简历写着熟悉 Dubbo,居然连 Dubbo 线程池监控都不知道?
SQL优化的魅力!从 30248s 到 0.001s
互联网初中高级大厂面试题(9个G)
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅
香蕉为什么能做随机数生成器?因为,它是水果界的“辐射之王”相关推荐
- 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器 本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...
- Linux 文件安全之随机数生成器
Linux 文件安全之随机数生成器 笔者:李晓辉 数据安全这一话题,在如今这个时代,哪里都在喊,但是我们每天都能看到由于数据安全不到位,造成多少多少损失,说实话,谁也不能保证数据的绝对安全,只有相对的 ...
- 封装不同类模板的随机数生成器
最近准备刷题,打算简单封装下随机数生成器,方便产生测试数据.C++11的STL提供了很多分布类型,我比较常用的是均匀分布,均匀分布的值有两种类型,一类是整数,另一类是浮点数,STL根据值的类型定义了两 ...
- c语言大作业 模拟泊松分布,C语言下泊松分布以及指数分布随机数生成器实现
最近实验室的项目需要实现模拟文件访问序列,要求单位时间内的数据请求次数符合泊松分布,而两次请求见的时间间隔符合指数分布.没办法只好重新捡起已经丢掉多时的概率知识.于是也就有了这篇关于在C语言下符合泊松 ...
- 指数分布c语言,C语言下泊松分布以及指数分布随机数生成器实现
最近实验室的项目需要实现模拟文件访问序列,要求单位时间内的数据请求次数符合泊松分布,而两次请求见的时间间隔符合指数分布.没办法只好重新捡起已经丢掉多时的概率知识.于是也就有了这篇关于在C语言下符合泊松 ...
- Java 随机数生成器 Random SecureRandom 原理分析
文章目录 java.util.Random java.Security.SecureRandom /dev/random 与 /dev/urandom 资料 Java 里提供了一些用于生成随机数的工具 ...
- luoguP3600 随机数生成器概率与期望Dp
luoguP3600 随机数生成器 题目描述 sol研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数. 现在sol打算生成n个[1,x]的整数a_1-a_n,然后进行一些询问. q次询问 ...
- 128bit整数范围的随机数生成器
注:本文"128bit整数范围"指"-2↑127~2↑127-1".另外,由于编辑器的bug,在非代码部分用"↑"来表示乘方符号 最近我对随 ...
- linux获取随机数脚本,Linux下对拍脚本与随机数生成器
对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > .in #运行数据生成器,将数据输出到1.in ./st ...
最新文章
- 四边形可以分为几类_学习知识:四边形有几种类型
- 不同操作系统之间的网络配置
- 数据中心即服务(DCaaS):建筑设计师的下一个重大机遇
- Python可视化中的Matplotlib绘图(1.画图,网格,子图,画正余弦图,坐标轴界限,画圆,)
- bzoj 4278 [ONTAK2015]Tasowanie——后缀数组
- 2018-08-15期 HBase命令行使用案例
- Packt发行的$ 5 Java编程书籍:精通Java 9,Java 9 High Performance
- 【转】C++ win32窗口创建详解
- opencv-4.5.3 + opencv_contrib-4.5.3 + vtk-9.0.3编译(全流程)
- SAP License:修改物料账期
- Automated Feature Engineering Basics
- [重要] Cocos2dx 3.0 PageView ListView 在Android设备下背景显示为绿色的问题的解决方案
- 今天将IE升级到了7.0版
- 关闭迅雷更新到新版本的提示
- 如何使用ADI公司的AD9833自制任意波形/函数发生器
- dump日志分析工具
- talking web android,talking web(网页朗读插件) 免费版
- [Elasticsearch] 多字段搜索 (五) - 以字段为中心的查询
- Cash-Secured Puts Vs. Covered Calls
- hdu 6357 Hills And Valleys——dp