開始簡介我被高階物種引導的第一個科研結果,就是一把在某些條件下可無限大與無限小
的尺,這把尺就是浮點運算,若讀者認為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看
你能懂多少?又能不能從那標準做到這樣的效果?