目錄
MicrosoftExcel中的數字精度
編輯與其他電子表格一樣,MicrosoftExcel只在有限的精度下工作,因為它只保留了一定數量的數字來描述數字(它的精度有限)。除了一些關于錯誤值、無限值和非正常化數字的例外情況,Excel以IEEE754規范中的雙精度浮點格式進行計算(除了數字,Excel還使用其他一些數據類型)。雖然Excel可以顯示小數點后30位,但對于一個指定的數字,其精度僅限于15位有效數字,而且由于以下五個問題,計算的精度可能更低:四舍五入、截斷和二進制存儲、計算中操作數偏差的累積,以及最糟糕的情況:減法時的取消,以及減去相似大小的值時的"災難性取消"。
準確度和二進制存儲
編輯在上圖中顯示了Excel中的分數1/9000。雖然這個數字的十進制表示法是一串無限的1,但Excel只顯示前15位數字。在第二行中,數字1被添加到分數中,同樣Excel只顯示15個數字。在第三行中,用Excel將1從總和中減去。因為小數點后的和只有11個1,所以減去'1'后的真正差值是3個0,然后是一串11個1。然而,Excel報告的差值是三個0,后面是一串15位的13個1和兩個額外的錯誤數字。因此,Excel計算出來的數字并不是它所顯示的數字。此外,Excel答案中的誤差并不是簡單的四舍五入,它是浮點計算中的一種效應,稱為"取消"。Excel計算中的不準確比15位有效數字的精度造成的誤差更復雜。Excel以二進制格式存儲數字也會影響其準確性。為了說明問題,下圖將幾個x值的簡單加法1+x-1制成表格,所有的x值都是從小數點后15位開始的,所以Excel必須將它們考慮在內。在計算和1+x之前,Excel首先將x近似為一個二進制數。如果這個二進制版本的x是2的簡單冪,那么x的15位十進制近似值就會被儲存在和中,圖中最上面的兩個例子表示恢復x沒有錯誤。在第三個例子中,x是一個更復雜的二進制數,x=1.110111?111×2-49(共15比特)。這里15位數字產生的'IEEE754雙值'是3.330560653658221E-15,在'用戶界面'上,Excel將其四舍五入為15位3.33056065365822E-15,然后用30位小數顯示,再加上一個'假零',因此樣本中的'二進制'和'十進制'值僅在顯示上是相同的,與單元格相關的值是不同的(1.11011111110000000000000000×2-49與1.11011111101111111101×2-49)。與其他電子表格類似,處理不同數量的小數位可以準確地存儲在"雙數"的53位尾數中(例如,在1和8之間有16位,但在0,5和1之間以及8和10之間只有15位)是有些困難的,并解決了"次優"。在第四個例子中,x是一個不等同于簡單二進制的十進制數(盡管它與第三個例子中的二進制數顯示的精度一致)。十進制輸入被二進制近似,然后使用該十進制。圖中的這兩個中間的例子表明,引入了一些誤差。
最后兩個例子說明了如果x是一個相當小的數字會發生什么。在倒數第二個例子中,x=1.110111?111×2-50;總共有15位。二進制被非常粗略地替換成2的單次方(在這個例子中,2-49),并使用其十進制等價物。在下面的例子中,一個與上面的二進制相同的十進制的精度,但與二進制的近似方式不同,被截斷到15位有效數字,對1+x-1沒有貢獻,導致x=0。對于不是2的簡單冪的x′,即使x很大,也會出現1+x-1的明顯誤差。例如,如果x=1/1000,那么1+x-1=9.9999999999989×10-4,這是一個13位有效數字的誤差。在這種情況下,如果Excel只是簡單地對十進制數字進行加減,避免轉換為二進制再轉換為十進制,就不會出現四舍五入的錯誤,精度實際上會更好。Excel有一個選項是設置顯示的精度。有了這個選項,根據情況,精度可能會變好或變差,但你會清楚知道Excel在做什么。(只有選定的精度被保留,而且不能通過反轉這個選項來恢復額外的數字)。一些類似的例子可以在這個鏈接中找到。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/168487/