开始简介我被高阶物种引导的第一个科研结果,就是一把在某些条件下可无限大与无限小
的尺,这把尺就是浮点运算,若读者认为2进制的硬件编码就是浮点数那就大错特错,
浮点数并不限定在2进制,而是只要符合公式架构就可称为浮点数。
相关的资料可看以下连结并可用程式自己尝试看看
https://www.facebook.com/groups/1403852566495675/posts/3176514222562825/
相关的图片
这程式改写前
https://reurl.cc/Wr0geD
这程式改写后
https://reurl.cc/7DKNZ5
原文来源
https://www.facebook.com/Seeker0428/posts/435973478342912
将我拙劣的技巧所写出的程式以google云端附连结于下,让有兴趣的读者看看这里面是否
有错误数据,因为我对C#还不是很熟,所以,有一些限制条件没有加进去,这是因为,我
只是打算拿来当计算工具使用,没有要求到很高很美观,先以实用为主,请各位注意一件
事,
这个工具是高阶物种的指引启发而来,应该是很漫长时间下的结果,不是凭空而来的东西
,请好好珍惜这个礼物!
by Shao-Ting Dai
程式下载处可从以下连结前往104个人品牌那获取连结
profile.104.com.tw/6OQe3toJWgx/portfolio
这几天发现我的进制转换方法并不完善,也就是若数值很小,原本的2进制(硬件)编码会
被无效位数吃掉精度。因此,重新思考了程式所描述的方法,并进一步改写成功,换句话
说原本的方式在1.875*10-7左右就挂掉,因为全被无效位数吃掉,而这里则是用某种方法
,将无效位数不记录在代表精度的内存位置,因此可以描述到很小的数值,只要前面都
是无效位数。
我们在浮点数的计算中,一直被教育说他的数值在单精度下可以从
+3.402823668*10^38~-3.402823668*10^38,这在两个极端时,是没错的,但是我们要知
道,尾数精度只有23bits,若是整数要编码完全涵盖,则是2^23=8388608,换句话说,只
有8.388608*10^6,这里所谓的完全涵盖,就是指可以连个位数都描述到的最大值,
为什么要特别强调这个值?因为当你的数值具有整数与小数位时,你在整数部分最大的容
许值就是这个数,超过个位数就不见了。比如说,我有一个数987654321.3333333,若想
要连小数都精确描述那就没办法,但是,若我是7654321.333333333333333,那我的转换
公式还有点毛可以精确描述到这么细,若数值是7654321.0000000000000000123,那我的
转换程式或许还有办法,只要小数位的前面一大部分都是无效位数,那我就可以要多精细
就有多精细。这是第一部分,大多数人都可以理解的东西,
现在来讲第二部分,这个程式的第二个特点就是多进制的转换,这有什么好处呢,简单讲
就是在同样的精度位数限制之下,我能够描述的数值更大,而这个大是想像不到的大,单
以精度的5个位数来看好了,2^5=32,我多一进制,3^5=243,9进制,
9^5=59049=5.9049*10^4,也就是说,当我用9进制时,我只要8个内存位置就大过2进制
所需要的23个位置所能描述的数值,那我原先预留给2进制的位置,在9进制下我能容纳多
少数字范围?各位可以去算算,换句话说在8个位置时我能描述到个位数的数字范围为
4.3046721*10^7,若加上小数前一大半部是无效位数,那我可以描述到多精细?
而这个就是我的程式目前能够达到的范围,重点是这个程式是任意进制都能转换,只是超
过10进制要标示对照表,那请各位看看,把这个程式当作一把尺来看,在可变动进制与可
变动内存位置下,它的精度可以到多少?
而这把金箍棒般可大可小的尺,不知被当成天机,掩盖了多久,不信,去研究IEEE 754看
你能懂多少?又能不能从那标准做到这样的效果?