문제의 printf 형식의 잘못된 사용입니다 - 사용 % g/% f를 대신 % D의
BTW - 당신은 당신의 코드가 여기에 무슨 짓을했는지 궁금하면 이해에 도움이 수있는 몇 가지 요약 된 설명은 다음과 같습니다
printf 루틴이 sqrt의 부동 소수점 결과를 정수로 처리했습니다. 부호가있는 부호없는 정수는 기본 비트 표현을 가지고 있습니다 (간단히 말해서, 이것이 메모리, 레지스터 등에 '인코딩 된'방식입니다). printf에 대한 형식을 지정함으로써 특정 메모리 영역/레지스터에서 비트 패턴을 해독하는 방법을 알 수 있습니다 (호출 규칙 등에 따라 다름). 예를 들어
unsigned int myInt = 0xFFFFFFFF;
printf("as signed=[%i] as unsigned=[%u]\n", myInt, myInt);
준다 : "= 서명 같이 - 1] 부호로서 = [4294967295] '사용하지만 나중에 제 부호 부호로 처리
하나 개의 비트 패턴. 코드에도 똑같이 적용됩니다. printf에게 sqrt의 부동 소수점 결과를 정수로 '인코딩'하는 데 사용 된 비트 패턴을 처리한다고 말씀하셨습니다. 이 참조 :
float myFloat = 8.0;
printf("%08X\n", *((unsigned int*)&myFloat));
인쇄 : "41000000"
single precision floating point encoding format에 따르면. 8.0은 단지 (-1)^0 * (1 + 분수 = 0) * 2^(exp = 130-127) = 2 * 3 = 8.0이지만 41000000 (물론 16 진수)처럼 int로 인쇄됩니다.
코드를 게시 할 수 있습니까? – hmjd
문제의 코드가 없으면 의미있는 대답이 될 수 없습니다. –
sqrt는 음수 값을 반환하지 않습니다. 너의 문제는 아주 깊게 달린다. 이 문제에 답하기 위해 코드를보아야한다는 것을 모르는 사실은 근본적인 문제입니다. 나는 당신이 컴퓨터가 똑같이 할 수 있다고 생각하지 않기를 바란다! –