6

可能重复:
更快/首选 memset 或 for 循环将双精度数组清零

以下代码使用 memset 将所有位设置为零

int length = 5;
double *array = (double *) malloc(sizeof(double)*length);
memset(array,0,sizeof(double)*length);
for(int i=0;i<length;i++)
  if(array[i]!=0.0)
    fprintf(stderr,"not zero in: %d",i);

我可以假设这将适用于所有平台吗?

double 数据类型是否始终符合 ieee-754 标准?

感谢您的回复,并感谢 ::fill 模板命令。但我的问题更多的是双数据类型。

也许我应该为纯 c 写我的问题。不过还是谢谢。

编辑:将代码和标签更改为 c

4

3 回答 3

4

如果您处于 C99 环境中,则无法得到任何保证。浮点数的表示在第 5.2.4.2.2 节中定义,但这只是逻辑的、数学的表示。该部分甚至没有提到浮点数如何以字节为单位进行存储。相反,它在脚注中说:

浮点模型旨在阐明每个浮点特性的描述,并不要求实现的浮点算法完全相同。

此外,§ 6.2.6.1 说:

除本小节中所述外,所有类型的表示均未指定。

在该子条款的其余部分中,没有提到浮点类型。

总之,不能保证 a0.0被表示为所有位为零。

于 2010-06-01T19:32:08.243 回答
3

它不是便携式的。只需使用循环。您不需要强制转换 malloc 返回值。

于 2010-06-01T10:19:38.910 回答
3

利用::std::fill(array, array+length, 0.0);

于 2010-06-01T08:34:41.277 回答