c - memset(ary,0,length) 是一种在双数组中输入零的可移植方式

标签 c floating-point double ieee-754 memset

<分区>

Possible Duplicate:
What is faster/prefered memset or for loop to zero out an array of doubles

以下代码使用 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

最佳答案

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

The floating-point model is intended to clarify the description of each floating-point characteristic and does not require the floating-point arithmetic of the implementation to be identical.

此外,§ 6.2.6.1 说:

The representations of all types are unspecified except as stated in this subclause.

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

总而言之,不能保证 0.0 表示为全零。

关于c - memset(ary,0,length) 是一种在双数组中输入零的可移植方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2948258/

相关文章:

ios - 如何将 dispatch_data_t 转换为 NSData?

重定位 vector 表的C代码

c - GStreamer - 向元素发出信号

c - 尝试编写用于查找机器 epsilon 的代码

java - 为什么以不同的顺序将三个 double 值相乘会得到不同的答案?

c++ - '->' token 之前预期有不合格的 id,如何解决此问题?

java - 迭代 ArrayList 添加值

php - 为什么 PHP 似乎无法正确评估此条件?

bash - 使用 float 时的语法错误

c++ - 将 double 从文本文件转换为二进制文件