2010-10-21 159 views
2

當使用fprintf將浮點數轉換爲十進制表示形式的文本時,輸出是一系列十進制數字(可能以0開頭)。
此表示法如何工作?浮點運算到MATLAB的fprintf()

>>fprintf('%tu\n',pi) 
>>1078530011 
>>fprintf('%bu\n',pi) 
>>04614256656552045848 

道歉,如果這是非常平凡的;我無法在其他地方找到答案,部分原因是搜索被各種可用的十進制數據類型所淹沒。

請注意,%t和%b標誌是C的fprintf()的兩個差異。根據文檔,它分別打印一個float或double,而不是一個無符號的整數。「 o,x和u在八進制,十六進制和十進制之間切換。

+1

FPRINTF/SPRINTF與C中的函數具有相同的語法。無論如何,您應該始終檢查MATLAB文檔:http://www.mathworks.com/help/techdoc/ref/fprintf.html – Amro 2010-10-21 00:57:14

+1

文檔說%t和%b是與C的兩個區別。 – 2010-10-21 08:20:19

+1

你不是不知道那裏的百分號嗎(即它不應該是''tu tu \ n''而不是'tu \ n'')? – 2010-10-21 08:47:26

回答

2

此表示形式是數字的二進制IEEE 754 floating point representation,打印爲無符號整數。

IEEE 754 Converter網站告訴我們Pi(大約3.1415927)的IEEE 754單精度表示是十進制的40490FDB,它是1078530011十進制數(您看到打印的數字)。格式說明符'%bu'的作用類似,但輸出雙精度表示。

這些格式說明符的用途是允許您將浮點值的位精確表示存儲到文本文件中。以可讀的形式打印浮點值的另一種方法需要非常小心,如果要保證位精確存儲,並且可能存在一些邊緣情況(非規範化值...?),您不會能夠精確地存儲。

1

如果你要打印的數量爲十六進制數:

>> fprintf('%bx\n', pi) 
    400921fb54442d18 

>> fprintf('%tx\n', single(pi)) 
    40490fdb 

然後格式化'%bx''%tx'只是相當於使用NUM2HEX:

>> num2hex(pi) 
    400921fb54442d18 

>> num2hex(single(pi)) 
    40490fdb 

另一種方法是簡單地設置默認輸出格式爲十六進制:

>> format hex 
>> pi 
    400921fb54442d18 
>> single(pi) 
    40490fdb 

在相關說明上,有@Loren最近的一篇文章: 「How Many Digits to Write?」 在那裏他們試圖找到需要寫多少十進制數字才能在MATLAB中重新讀取時保留數字的完整精度。