簡體   English   中英

使用比格式支持的數字更高的精度來顯示數字時,會寫出哪些數據?

[英]What data is written out when a higher precision is used to display a number than the one supported by the format?

IEEE 754雙精度浮點格式的二進制精度為53位,可以轉換為log10(2 ^ 53)〜16個有效十進制數字。

如果使用雙精度格式將浮點數存儲在內存中64位長的字中,其中有效位52位,隱藏位1位, 但是使用較大的精度將數字輸出到屏幕,該怎么辦?數據實際上是從內存中讀取並寫入輸出的?

當單詞的總長度為64位時,如何讀取機器上的“從內存讀取”操作是否只是讀取更多位並將其解釋為數字的有效位數呢?

例如,取數字0.1。 無論使用哪種精度,它都沒有精確的二進制浮點表示形式,因為它的有效位數具有無限重復的二進制浮點模式。

如果以雙精度存儲0.1,並使用C ++語言以這樣的精度> 16打印到屏幕:

#include <iostream> 
#include <iomanip> 

using namespace std;

int main()
{
    double x = 0.1; 
    cout << setprecision(50) << "x= " << x << endl;
}; 

輸出(在執行時在我的機器上)是:

x = 0.1000000000000000055511151231257827021181583404541

如果正確的舍入與2個保護位和1個粘性位一起使用,我是否可以相信錯誤5.551115123125783e-17中前三個非零二進制浮點數給出的十進制值?

每個二進制分數都等於某個十進制分數。 如果通常情況下double是二進制浮點類型,則每個double數字都具有完全相等的十進制表示形式。

對於以下內容,我假設您的系統使用IEEE 754 64位二進制浮點數來表示double 這不是標准要求的,但是很常見。 該格式中最接近0.1數字具有精確值0.1000000000000000055511151231257827021181583404541015625

盡管此數字有很多數字,但它完全等於3602879701896397/2 55 分子和分母都乘以5 55會將其轉換為小數,同時增加分子的位數。

與問題的結果相一致的一種常用方法是對格式要求的位數進行舍入取整。 實際上,這將提供有關將字符串轉換為double舍入錯誤的有用信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM