差之毫厘谬以千里-计算中的精度问题
生活随笔
收集整理的這篇文章主要介紹了
差之毫厘谬以千里-计算中的精度问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果你只是i++來作計數器就可以跳過此post,主要是為進行大數據計算和與錢相關的計算的同志們寫的,也許有謬誤,歡迎批評指出
很多時候,絕大部分的大學生在參加工作后都是把計算機當作一個大型計算器一般的來寫程序,譬如double a=12936/123546;,fine
當這個結果僅供娛樂,那么很幸運,你只需要繼續使用就行了,但是再小的誤差積累起來都是一個可怕的數字,而計算的誤差對于計算
機來說,對于一般人潛意識里認為是精確的代名詞的計算機來說卻是家常便飯。很多時候我們意識到會有誤差,但是都使用高精度的類型去彌補
但是對于很多情況下都還是不夠,因為誤差仍然是存在的,只是我們認為可以忽略了而已。
很多和錢打交道的計算都應該很注意誤差對于計算的影響,比如曾經有部小說里描述過一種方法,有個黑客入侵了銀行系統,他把每個帳戶的余額都作了一次運算,由于計算的誤差,每個帳戶多了幾厘錢,對于銀行來說這幾厘錢毫不起眼,但是他把所有帳戶多出來的幾厘錢匯入了自己的帳戶,于是一個百萬富翁就此誕生,而每個銀行帳戶上的錢都沒有少。當然,小說是小說但是足夠提起我們對于誤差的重視
計算機里誤差的原由其實很簡單,計算機只能快速的搬動它的兩根指頭來計算,所以在計算機里,加減法是安全的,但是也僅僅對于整數而言,兩個浮點數的計算就會因為浮點數本身的原因造成最后的幾位存在疑問,當多次相加,誤差就會累積起來,然后和滾雪球一樣越來越大,浮點加減的誤差按照線形增長,乘除就更加霸道了,會按照指數增長。而對于分數來說在計算機里只有1/2,1/4,1/8,1/16等1/2 的指數才是精確的,所以對于計算來說最好是可能的話把乘除都換算成等價的加減運算。拋磚引玉,到此為止......
很多時候,絕大部分的大學生在參加工作后都是把計算機當作一個大型計算器一般的來寫程序,譬如double a=12936/123546;,fine
當這個結果僅供娛樂,那么很幸運,你只需要繼續使用就行了,但是再小的誤差積累起來都是一個可怕的數字,而計算的誤差對于計算
機來說,對于一般人潛意識里認為是精確的代名詞的計算機來說卻是家常便飯。很多時候我們意識到會有誤差,但是都使用高精度的類型去彌補
但是對于很多情況下都還是不夠,因為誤差仍然是存在的,只是我們認為可以忽略了而已。
很多和錢打交道的計算都應該很注意誤差對于計算的影響,比如曾經有部小說里描述過一種方法,有個黑客入侵了銀行系統,他把每個帳戶的余額都作了一次運算,由于計算的誤差,每個帳戶多了幾厘錢,對于銀行來說這幾厘錢毫不起眼,但是他把所有帳戶多出來的幾厘錢匯入了自己的帳戶,于是一個百萬富翁就此誕生,而每個銀行帳戶上的錢都沒有少。當然,小說是小說但是足夠提起我們對于誤差的重視
計算機里誤差的原由其實很簡單,計算機只能快速的搬動它的兩根指頭來計算,所以在計算機里,加減法是安全的,但是也僅僅對于整數而言,兩個浮點數的計算就會因為浮點數本身的原因造成最后的幾位存在疑問,當多次相加,誤差就會累積起來,然后和滾雪球一樣越來越大,浮點加減的誤差按照線形增長,乘除就更加霸道了,會按照指數增長。而對于分數來說在計算機里只有1/2,1/4,1/8,1/16等1/2 的指數才是精確的,所以對于計算來說最好是可能的話把乘除都換算成等價的加減運算。拋磚引玉,到此為止......
總結
以上是生活随笔為你收集整理的差之毫厘谬以千里-计算中的精度问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 差之毫厘,谬以千里,iOS5编译vlc
- 下一篇: gee学习笔记 第二天