Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的浮点数组_C_File Io_Floating Point - Fatal编程技术网

C语言中的浮点数组

C语言中的浮点数组,c,file-io,floating-point,C,File Io,Floating Point,我正在开发一个代码,其中我必须在文本文件中一次加载存储在每行中的浮点值…我使用fscanf()将这些数据加载到浮点数组中…但是我发现浮点是以不同的方式存储的,例如407.18存储为407.179993,414.35作为414.350006…现在我被卡住了,因为数字存储在文件中的形式是绝对重要的,但在这里,尽管本质上是相同的,但似乎是不同的…我如何让数字存储在原始形式中?如果数字存储在文件中的形式是绝对重要的话在文件中,不使用浮点值。并非所有小数的10进制值都可以用二进制精确表示 有关详细信息,请

我正在开发一个代码,其中我必须在文本文件中一次加载存储在每行中的浮点值…我使用fscanf()将这些数据加载到浮点数组中…但是我发现浮点是以不同的方式存储的,例如407.18存储为407.179993,414.35作为414.350006…现在我被卡住了,因为数字存储在文件中的形式是绝对重要的,但在这里,尽管本质上是相同的,但似乎是不同的…我如何让数字存储在原始形式中?

如果数字存储在文件中的形式是绝对重要的话在文件中,不使用浮点值。并非所有小数的10进制值都可以用二进制精确表示

有关详细信息,请参阅文章[PDF链接]


您应该以字符串形式或按比例整数形式存储数字。

如果绝对重要的是数字必须以文件中的形式存储,不要使用浮点值。并非所有小数的10进制值都可以用二进制精确表示

有关详细信息,请参阅文章[PDF链接]


您应该以字符串形式或缩放整数形式存储数字。

您看到的是正确的,因为浮点不能准确地表示许多实数。这是必须阅读的:

您看到的是正确的,因为浮点不能准确地表示许多实数。这是必须阅读的:

< P> C++ >代码>浮点< /COD>和<代码>双类型被表示为IEEE浮点数字。有二进制浮点数,而不是小数。它们没有无限精度,即使是相对“简单”的十进制值,在转换为二进制浮点数并返回时也会发生变化


专注于货币的语言(例如COBOL和PL/I)具有十进制数据类型,这些数据类型使用较慢的表示形式,而没有这个问题。在C或C++中有用于此目的的库,或者如果不需要太多的范围,可以使用缩放整数。

< P> C++ >代码>浮点< /C> >和<代码>双< /C> >类型被表示为IEEE浮点号。有二进制浮点数,而不是小数。它们没有无限精度,即使是相对“简单”的十进制值,在转换为二进制浮点数并返回时也会发生变化


专注于货币的语言(例如COBOL和PL/I)具有十进制数据类型,这些数据类型使用较慢的表示形式,而没有这个问题。在C或C++中有用于此目的的库,或者如果不需要太多的范围,可以使用缩放的整数。

您可能需要查看现有的实现控制点的浮点的库。我用过。它是快速和开源的。如果您使用的是货币,那么另一个库会更好。

您可能需要查看一个现有的库,该库实现了带受控舍入的浮点运算。我用过。它是快速和开源的。如果你在用钱工作,那么另一个图书馆会更好, 需要澄清的是:您声明“…绝对重要的是,数字必须以文件中的形式存储”-这是什么‘形式’?我假设是一张展示表格?!这里的交易:如果你存储在文件407.18,但它显示为407.179993-这是完全正常和预期的。当您构建sprintf或正在使用的任何格式化打印时,必须指示它限制小数点后的精度。这应该可以做到:

#include <stdio.h>
void main(void);
void main()
{
   printf("%.2f",407.179993);
}
#包括
空总管(空);
void main()
{
printf(“%.2f”,407.179993);
}
s因素, 需要澄清的是:您声明“…绝对重要的是,数字必须以文件中的形式存储”-这是什么‘形式’?我假设是一张展示表格?!这里的交易:如果你存储在文件407.18,但它显示为407.179993-这是完全正常和预期的。当您构建sprintf或正在使用的任何格式化打印时,必须指示它限制小数点后的精度。这应该可以做到:

#include <stdio.h>
void main(void);
void main()
{
   printf("%.2f",407.179993);
}
#包括
空总管(空);
void main()
{
printf(“%.2f”,407.179993);
}

存储数字的方法有很多种,每种方法都有各自的优缺点

在您的情况下,浮点数不是最佳选择,因为它们不能准确地表示大多数实数

缩放整数是一种常见的设计习惯用法:将表示与表示分开

决定小数点后需要多少位数,例如123,45中的2位数。然后,您应该在内部将数字表示为整数12345。无论何时向用户显示值,都应在相关点插入小数点


在讨论缩放整数之前,请仔细检查您的问题域,断言浮点数中的“松弛”足够重要,可以使用缩放整数进行验证。

存储数字的方法有很多种,每种方法都有各自的优缺点

在您的情况下,浮点数不是最佳选择,因为它们不能准确地表示大多数实数

缩放整数是一种常见的设计习惯用法:将表示与表示分开

决定小数点后需要多少位数,例如123,45中的2位数。然后,您应该在内部将数字表示为整数12345。无论何时向用户显示值,都应在相关点插入小数点


在讨论缩放整数之前,请仔细检查您的问题域,断言浮点数中的“松弛”足够重要,可以使用缩放整数进行验证。

+1获取文章链接;我不知道有一个HT