IDE:Visual Studio Express 2015 for Windows Desktop
浮動小数点モデル設定:Fast Math
コンパイルモード:Release

wWinMain関数内で

wchar_t str[ 16 ];

DirectX::XMMatrixOrthographicLH( 1.0f, 1.0f, 0.0f, 1.0f );

for( int i = 0;; i++ )
{
 float f = i;

 if( f > 0.0f ) break;

 swprintf_s( str, L"%f", f );
}

と書くと、swprintf_sの結果が、期待される0.0ではなく、-0.0になります。
swprintf_sの行と上のif文の行を入れ替えると、0.0になります。

XMMatrixOrthographicLHがなかったり、Debugモードだったり、
Fast MathではなくデフォルトのPreciseだったりすると、
行の入れ替え関係なく0.0。

-0.0になるときは、何が始ま・・・起こってるんです?