소프트웨어 부동 에뮬레이션 (하드웨어 부동 소수점을 사용할 수 없음)을 지원하는 32 비트 powerpc 커널에서 아래의 C++ 프로그램을 실행할 때 잘못된 조건부 평가가 발생합니다. 어떤 사람들은 잠재적 인 문제가 무엇인지 말해 줄 수 있습니까?부동 소수점 동작이 올바르지 않습니다.
#include <stdio.h>
int main() {
int newmax = 1;
if ((newmax + 0.0) > 256) {
printf("\nShouldn't be here\n");
} else {
printf("\nShould be here\n");
}
}
컴파일 : 대상 시스템에
powerpc-linux-g++ -msoft-float -c floating.cxx
powerpc-linux-g++ -o floating floating.o
출력 : 를 링크 할 때
[linux:/]$ ./floating
Shouldn't be here
커널이란 무엇입니까? 내 최선의 추측은 에뮬레이션이 부동 소수점 표준에 어떻게 든 복종하지 않는다는 것입니다. 정확하지 않은 표현은 0입니다. 또한 기본값 0.0은 float이 아닌 double 값을 사용한다는 점에 유의하십시오. 어쩌면 소프트웨어 에뮬레이터가 이중을 지원하지 않을 수도 있습니다. – speeder
연결할 때 -msoft-float도 지정해야합니다. –
@speeder. 이것은 사용자 정의 2.6.32.59 커널입니다. 나는 이것이 커널에서 소프트웨어 에뮬레이션 문제가 될지 의심 스럽다. – rajachan