내 프로그램을 부동 소수점 정밀도에서 배정 밀도로 변경하고 있습니다. 그럼에도 이진 파일에서 부동 소수점 숫자 을 읽어이 루틴을 시작합니다. (amxs 및 amxr 이중 크기이며, L이 INT C는 float 유형의 할당 된 배열에 double을 어떻게 저장합니까?
matlabfile=fopen("matlabfile","a+"); fprintf(matlabfile,"%d;%15.7e;%15.7e\n",l,amxs,amxr); fclose(matlabfile);
이다
및 matlabfile이다 :bufz = alloc1float(nz);
for (i=0; i<nx; i++) {
nu = efread(bufz,sizeof(float),nz,vel);
for (k=0; k<nz; k++)
vn2[k][i] = bufz[k];
}
난 배정도이어야하고 파일에 계산 된 값을 기록한다 계산 진행 파일 포인터)
내 질문 : double precision으로 산술 연산을 수행 할 때 C은 float 유형의 입력 매개 변수를 어떻게 처리하며 어떻게 반올림합니까? 출력 결과는? 표시된 것처럼 쉽게 표시 할 수 있습니까?
편집 : FILE * vel, * matlabfile;
int main(int argc, char *argv[])
{
int i, nx, nz, k, nu, l;
double amxs, amxr;
double *buf;
double **vn2;
vn2 = alloc2double(nx,nz);
buf = alloc1float(nz);
/* read input binary file */
for (i=0; i<nx; i++) {
nu = efread(buf,sizeof(float),nz,vel);
for (k=0; k<nz; k++) vn2[k][i] = bufz[k];
}
Arithmetics with double precision arrays, variables and vn2...
// save output
matlabfile=fopen("matlabfile","a+");
fprintf(matlabfile,"%d;%15.7e;%15.7e\n",l,amxs,amxr);
fclose(matlabfile);
변수 선언, 즉 모든 유형이 무엇인지 표시해야합니다. –
관련 코드를 제외한 모든 것을 보여 주셨습니다! 단 정밀도 데이터로 시작하는 배정 밀도 계산의 코드는 어디에 있습니까? –
이름에서 알 수 있듯이 double 데이터 유형은 float에 비해 2 배의 정밀도를가집니다. 따라서 float에서 double로 변환 할 때 정밀도가 손실되지 않습니다 (추가 정밀도는 0으로 채울 수 있음). 반전 변환에서 절단이 발생합니다. – CuriousSid