【问题标题】:What are the largest & smallest values that can be stored in RRDtool?RRDtool 中可以存储的最大值和最小值是多少?
【发布时间】:2014-03-14 12:07:03
【问题描述】:

我有一个系统,我想用 Munin 记录它,它使用 RRDtool。我想计算的一些值可能(有一天)会变得非常大,例如 TB 整数的总和。我想知道我在 Munin 中使用的数据存储在我尝试在其中存储大值时不会溢出。

我在http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html#IGAUGE 的文档中看不到有关支持的数据大小、范围或精度的任何注释,并且我没有通过谷歌搜索相关术语找到任何内容。

请问有关于 GAUGE、COUNTER、DERIVE、ABSOLUTE 和 COMPUTE 数据存储的支持范围和精度的任何文档吗?

【问题讨论】:

    标签: rrdtool


    【解决方案1】:

    在内部,RRDTool 将值存储为double 数据类型。然而,这实际上意味着什么有时可能取决于您的系统架构和编译器——这是 RRD 文件不可移植的原因之一。

    要找出系统上的值是什么,假设您自己编译了代码,请在 C 头文件中查找 DBL_MAX 的定义(检查 float.h、limits.h、values.h ... )

    在我们的系统中,Double 的最大值是1.79769313486231470e+308;但是,一旦超过 1.0e+15,由于尾数长度有限(只有 52 位精度),您将开始看到精度下降

    如果您的编译器可以修改rrd.hrrd_format.hrrd_value_t 的定义以使用long double(80 位精度)甚至__float128quadruple(128 位精度)支持它,但如果你这样做,你就得靠自己了,而且它肯定不会向后兼容......

    【讨论】:

    • 如果我必须在double 不是 IEEE754 的系统上运行代码,那么无论如何我都会遇到很大的麻烦。 :)
    • 谢谢! rrd_value_t in rrd.h 正是我想要的。
    • 编译器与double 引入的主要区别更多地取决于字节对齐和字节序(这是一个词吗?),而不是您所说的 IEEE 指定的精度。尽管如此,编译器还是会做坏事,所以如果可以的话,请检查float.h
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2016-04-17
    相关资源
    最近更新 更多