2014/03/24(月)Visual Studioのsqrt

Visual Studioの32bitでsqrtの丸めの向きが変わらない。
#include <float.h>
#include <math.h>
#include <stdio.h>

int main() {
	volatile double r, x;

	_controlfp(_PC_53, _MCW_PC);

	x = 2.;

	_controlfp(_RC_UP, _MCW_RC);
	r = sqrt(x);
	_controlfp(_RC_NEAR, _MCW_RC);
	printf("%.17g\n", r);

	_controlfp(_RC_DOWN, _MCW_RC);
	r = sqrt(x);
	_controlfp(_RC_NEAR, _MCW_RC);
	printf("%.17g\n", r);

	return 0;
}
こんな感じのソースで、なぜか表示される値が同じになってしまう。
自分の環境はwin7 64bitで、Visual Studio 2008。
Visual Studio 2008 コマンドプロンプト (Win64じゃない方) でcl使ってコンパイルした。
64bitコンパイルすれば問題ない。
なんでだろ。FPU使わずに独自コード使ったりしてんのかな。

(2014年3月25日追記)

windows用のmatlabの古い奴 (R2007b) の32bit版で同じような現象を確認した。
>> format hex
>> system_dependent('setround', inf)
>> 1/3
ans =
 3fd5555555555556
>> sqrt(2)
ans =
 3ff6a09e667f3bcd
>> system_dependent('setround', -inf)
>> 1/3
ans =
 3fd5555555555555
>> sqrt(2)
ans =
 3ff6a09e667f3bcd
除算の丸めは変わっているけどsqrtは変わってない。windows用のmatlabはVisual C++でmakeされているのだろうか。
OK キャンセル 確認 その他