2014-03-13 55 views
0

我有一個系統,關於我想要使用RRDtool的Munin進行錄製。我想計算的一些值可能(有一天)會變得非常大,例如整數TB的總和。我想知道,當我嘗試在其中存儲大數值時,在Munin中使用的數據存儲不會溢出。可存儲在RRDtool中的最大和最小值是多少?

我在http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html#IGAUGE的文檔中看不到有關支持的數據大小,範圍或精度的任何說明,並且我沒有成功找到Google搜索相關術語的任何內容。

請問有沒有關於GAUGE,COUNTER,DERIVE,ABSOLUTE和COMPUTE數據存儲的支持範圍和精度的文檔?

回答

1

RRDTool在內部將值存儲爲double數據類型。但是,這實際上意味着什麼有時可能取決於您的系統架構和編譯器 - 這是RRD文件不可移植的原因之一。

要找出系統上的值,假設您自己編譯了代碼,請在C頭文件中查找​​(檢查float.h,limits.h,values.h ...)的定義。

在我們的系統中,Double的最大值是1.79769313486231470e+308;但是一旦你過去1.0E + 15,你將開始看到精度損失尾數長度是有限的(這是唯一的52bit精度)

它可能會修改的rrd_value_t的定義rrd.hrrd_format.h使用一個long double(80位精度)或甚至__float128quadruple(128位精度)如果您的編譯器支持它,但你會自己做,如果你這樣做,它肯定不會向後兼容...

+0

如果我曾經在一個系統上運行代碼,其中'double'不是IEEE754,所以我無論如何都遇到了很大的麻煩。 :) –

+0

謝謝! rrd.h中的rrd_value_t正是我想要的。 –

+0

編譯器引入'double'的主要區別在於字節對齊和字節順序(是一個字嗎?)而不是IEEE所指定的精度。儘管如此,編譯器可以做壞事,所以如果可以的話,請檢查'float.h'。 –

相關問題