2012-04-27 1 views
3

꽤 많은 기사에서 float-> integer를 빠르게 변환하기 위해 fistp 명령어를 사용하는 것이 좋습니다. 이것은 CPU의 현재 반올림 모드에 따라 다르므로 설정해야합니다.언제 CPU의 반올림 모드가 바뀔 수 있습니까?

그러나 다른 프로그램에서 프로그램 실행 중에이 반올림 모드가 변경 될 수 있습니까? OS 별로요?

더욱 악화 될 수있는 가능한 시나리오 (의사 코드)입니까?

set_rounding_mode(ROUND_TRUNCATE); 
/* process gets switched out and other process sets the rounding mode to round */ 
int x = round_with_fistp(0.6); 
printf("%d\n", x); // prints 1 
+0

나는 대답이 '아니오'라고 생각합니다. 부동 소수점 모드는 컨텍스트 스위치를 통해 저장해야하는 많은 것들 중 하나입니다. – Mysticial

답변

5

sane 범용 OS는 프로세스와 스레드에서 반올림 모드를 공유하지 않습니다. 스레드가 요청할 때만 변경해야하며 변경 사항은 해당 스레드에만 국한되어야합니다. 그러나 일부 라이브러리 (특히 타사)가이를 변경하고 때로는 (또는 항상) 라이브러리를 복원하지 못하고 해결 방법을 구현해야 할 수도 있습니다.