모두의 코드 커뮤니티

제 코드의 문제점을 찾을 수가 없습니다

질문은 :

첨부 파일에는 바이너리 형식의 긴 정수 10,000 개가 포함되어 있습니다.
첨부 파일을 읽고 10,000 long 정수의 엔디안을 little에서 big으로 변경하십시오.
10,000 개의 변경된 정수 중 첫 번째 비트가 1 인 숫자 만 선택하고 표준 편차를 계산하여 갯수와 함께 화면에 출력합니다. (비트 번호는 0부터 시작합니다.)

코드를 작성했지만 답이 계속 이상하게 나옵니다. 제 코드에 문제가 없는 것 같은데… 제 경우에는 1468, 1208575872.00000으로 나오지만 답은 1468, 1208575104.00000입니다. 문제점이 뭘까요? 왜 갯수는 맞는데…표준편차만 틀리게 나오는걸까용… 이것저것 자료형 바꿔봐도 안나오네요…

#include "pch.h"
#include <iostream>
#include <math.h>

int main() {
	FILE *f1;
	long *buffer;
	errno_t err;
	err = fopen_s(&f1, "C:\\Users\\hyo05\\Desktop\\c\\ttt.dat", "rb");
	buffer = (long*)malloc(sizeof(long) * 10000 + 1);
	fread(buffer, sizeof(long), 10001, f1);
	float avg1, k, sd;
	double f, v;
	char t;
	float sum1 = 0;
	double sum2 = 0;
	int count = 0;
	if (f1 == NULL) {
		printf("no file\n");
	}
	for (int i = 0; i < 10001; i++) {
		char *p = (char *)&buffer[i];
		t = *(p + 3);
		*(p + 3) = *p;
		*p = t;
		t = *(p + 2);
		*(p + 2) = *(p + 1);
		*(p + 1) = t;
	}
	for (int i = 0; i < 10001; i++) {
		if (buffer[i] & 2) {
			sum1 = sum1 + buffer[i];
			count++;
		}
	}
	avg1 = sum1 / count;
	for (int i = 0; i < 10001; i++) {
		if (buffer[i] & 2) {
			k = buffer[i] - avg1;
			f = k * k;
			sum2 = sum2 + f;
		}
	}
	v = sum2 / count;
	sd = sqrt(v);
	printf("%d, %0.5f, %f", count, sd, v);
}

avg1, k, sd, sum1 모두 double 로 바꿔보세요.

아마 부동 소수점 타입들 간에 형 변화에서 오차가 발생하는 것 같네요.