我们知道,单精度浮点数运算时会产生误差,但是误差具体是如何产生的?本篇博文将详细分析float浮点数在运算时产生误差的原因,我们首先通过一段C代码来进行浮点运算
C代码
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define MYDBG
int main() {
float a = 1;
float s;
float *x = NULL;
int n = 0;
int i;
float t;
while(1) {
printf("\n输入种子数 a (将用 a×2^(i-n/2) 填充数组x[n]):");
scanf("%f", &a);
printf("\na=%f\n", a);
printf("\n输入数组 float x[n] 的大小 n (非正数将退出程序):");
while(scanf("%d", &n) != 1) {
getchar();
}
if(n<1) break;
x = (float*) malloc( sizeof(float) * n );
if(x==NULL) {
printf("\n申请数组 float x[%d] 空间失败!\n", n);
continue;
}
s = 0;
for(i=0; i<n; i++) {
x[i] = a * powf(2, i-n/2);
s += x[i];
#ifdef MYDBG
printf("\nx[%d] = %f", i, x[i]);
printf(" s=%f", s);
#en