如何确定文件中的字符串是浮动还是在C 中倍增
How to determine if string from file is float or double in C++?
我想解析文件,并确定我阅读的数字是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
。
是否有一些最佳阅读方式,同时确定字符串是否可以存储在float
或double
中?
读取小数点值的问题是,仅通过查看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位数字的东西都将被截断。
- 初始值设定项无法确定 C++ 中字符串的大小
- 不确定出了什么问题(字符串输入)
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- 给定两个字符串 S 和 T.确定与 T 相差最小的 S 子字符串?
- c++ 将字符串发送到函数以确定字符串的长度
- 如何确定字符串是否包含在 std::vector 的任何字符串中
- 如何确定字符串是否只有数字,没有字母
- C++有没有办法确定字符串是"interned"还是在只读持久位置?
- 尝试在C++中使用递归来确定字符串的长度
- 有条件地确定字符串是否是数组的一部分
- 确定字符串的字符集
- 确定字符串中有多少单词被格式化为MMDDYY形式的日期,并对其进行计数.(C++)
- 使用条件来确定字符串中的元素
- 实现O(n)算法来确定字符串是否所有字符都是唯一的
- 确定字符串是否具有相同的字符
- 通过函数确定字符串数组的大小
- visualstudio2008-如何确定字符串是否是C++中的有效IPv6地址
- 确定字符串是否为双精度值
- 如何确定字符串中是否包含非数字?
- 是否有stl或boost函数来确定字符串是否为数字