如何确定文件中的字符串是浮动还是在C 中倍增

How to determine if string from file is float or double in C++?

本文关键字:何确定 字符串 文件      更新时间:2023-10-16

我想解析文件,并确定我阅读的数字是float还是double。我解析的文件是矩阵市场格式中的矩阵之一(如:https://sparse.tamu.edu/hb/1138_bus)。

基本上,输入按以下顺序: int int float (or double)

1138 1138 2596
1 1 1474.779
5 1 -9.017133
563 1 -5.730659
2 2 9.136654
10 2 -3.405995

等...

当我阅读浮点数时,我想确定该号码是否可以存储在float中或需要大的东西,例如double

是否有一些最佳阅读方式,同时确定字符串是否可以存储在floatdouble中?

读取小数点值的问题是,仅通过查看float是否具有足够的精度来告诉它们。

例如,1.0009765625将在float中精确修复,但1.1完全不适合double(或任何二进制浮点类型)。

在浮点类型中阅读时,最好始终使用double。除非您有非常具体的原因,否则通常应避免使用float

您可以检查分析的数字中的基本10位数。如果大于std::numeric_limits<float>::digits10,则使用double是更好的选择。

可以转换许多具有许多重要小数的数字 到T型的值并回到十进制形式,而没有因 舍入或溢出

这意味着您将准确地将您的电话号码达到最后一个重要的数字。由于舍入和溢出,其余的不可靠。

经验法则:

  • IEEE-754单精度(浮动)可以存储约7个小数位数
  • IEEE-754双精度(双重)可以存储大约16个小数位数

在您的示例中, float足以 store 数字

如果您将浮点数的前七个小数位保存到文件中,则保证它们与原始数字完全相同。但是,如果您对该数字进行任何操作,结果将受到整个数值分析领域的舍入错误。

您的工作绝对是可能的,但是为什么需要?

千兆字节可以存储2.5亿个浮子。千兆字节可以存储1.25亿双打。如果您需要达到这个高位目标,那么您将在需要更多空间之前就有性能问题。

为什么需要精确度?如果您正在执行计算器项目或精度很重要的事情,那么您应该使用这样的自定义数据类型来处理数值交互:

https://gmplib.org/

这里的优势是它可以动态调整大小,并且不会圆形数字,这两倍和浮子最终都必须做。

如果您的方法已固定,但是我建议您阅读您的字符串并检查字符串的大小。如果是7或更长时间将其存储为双人,如果它不到7位,将其存储为浮点。任何超过15位数字的东西都将被截断。