
前言
在前篇《VB的整數,你真的了解?》中,向讀者介紹整數時提到,計算機里實際上只有整數一種型別,那浮點數是如何表示的呢?浮點數的使用性能是不是比真正的整數要差呢?VB在應用程序中要注意哪些事項呢?本篇將詳細分析,來看看吧,
一、淺談浮點數
人類在進化程序中,發明了很多種度量單位,來量化我們所處的世界,但在客觀世界里,沒有那么多剛剛好的事,比如銀行存款余額,時間,導彈射程,戰艦位置等,人類也不可能無限細分度量單位,好比在計算機世界里,我們不能給每個記憶體單元(位元組)都取一個名字,只能給有意義的記憶體冠名(變數),
這時浮點數就顯得例外重要了,代表著人類對客觀世界的把控程度,這種把控充滿了主觀色彩,可以用”在乎”一詞來形容浮點數對人的意義,首先,在不同背景下,需要不同的精度,比如我們很少在意金錢資料角分之后的資料,但是在高能物理界可能需要小數點后N個數位,否則差之毫厘失之千里,其次,精度的轉換又常常在不經意間發生,比如朋友來了有好酒,我們出手闊綽,毫不計較,但敵人來了有獵槍,一個子兒也不會多給,
雖然,計算機只認整數,但是我們人更多地是認小數(也即浮點數或實數)的,因為小數才有現實意義,超算和位元幣礦機,想必大家有所耳聞,他們都偏重計算,講究的是算力,如果說位元幣礦機有點不務正業,那超算是正兒八經的為科學研究服務吧,很多高精尖領域的研究,都離不開超算,但是衡量超算能力最核心的指標之一,就是浮點運算能力,
最近幣市火爆,筆者也有談到位元幣,有朋友問礦機為何要裝顯卡?其實,就跟浮點數運算有關啦,我們知道顯卡專注于提升影像圖形的處理能力,而圖形的處理就涉及到精度的問題,也就是浮點數的處理嘍,而位元幣挖礦在非對稱加解密、哈希等計算中要涉及浮點數的,所以給礦機加顯卡,是可以提高算力的,
二、VB的浮點數結構
1、Single型別
占4位元組,6位有效小數,由1Bit符號位、8Bits指數位和23Bits有效數位三部分組成,其結構如下:

那Single又是如何轉換為整數的呢?按照IEEE(美國電氣和電子工程師學會)的標準,按照以下公式進行轉換:
l= (-1)^s * (1 + f) * 2^(e - 127)
其中:l為十進制整數,s為第32bit位的符號(0為正數,1為負數),f為有效小數,e為冪指數,
看上去很復雜,其實在VB里非常簡單,將Single變數的記憶體資料,直接拷貝到Long型別變數的記憶體里,就完成了轉換,
2、Double型別
占8位元組,15位有效小數,由1Bit符號位、11Bits指數位和52Bits有效數位三部分組成,結構與Single類似,與十進制轉換公式為:l= (-1)^s * (1 + f) * 2^(e - 1023),
在VB中,需要借助Currency型別,來實作轉換,
3、Date型別
占8位元組,是VB的日期格式,DATE在WTYPES.H中定義為"typedef double DATE;",所以Date就是Double型別,值得一提的是,其整數部分為年月日,小數部分為時分秒,可以手工實作高精度時間哦,
三、VB浮點數使用程序中要注意哪些?
按浮點數的結構,我們可知浮點數在計算機中,并不等于數學意義上的實數,而是存在人為舍位的近似值,因此時時刻刻牢記精度問題,是正確使用浮點數的前提,
1、浮點數與10進制整數相互轉換時,存在精度問題,
2、浮點數謹慎用于相等判斷,
3、VB對小數常數、除法結果等默認為Double型別,在計算中只要有小數,都會做Double型別轉換,會降低代碼性能,在X86的32位機器下,CPU處理Single的速度更快,若精度允許,應盡量使用該型別,否則應統一使用Double型別,
4、VB中若需要更高精度的浮點數,則需借助Decimal型別,該型別支持28位有效小數位,但性能也更低,
歡迎關注BtOfficer及各大自媒體平臺同名賬號,筆者研發的安全生產框架,專為非IT人士服務,集成海量實用工具,更提供功能齊全的編程介面,重要的是可完美兼容VB家族語言,是非IT潛心于業務生產的利器,關注“BtOfficer”公眾號,即可獲取深入淺出的開發幫助,系統的底層知識,答疑等福利,還有行業情報,產品經銷資格等您來拿哦,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/289931.html
標籤:區塊鏈
