本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSVC] 浮動小数点エミュレータの演算ミス

文書番号: 401957

最終更新日: 2004/03/30


この資料は以下の製品について記述したものです。


概要

この資料は、浮動小数点エミュレータの演算ミスについて説明したものです。

詳細

以下のサンプルプログラムを、FPU (コプロセッサ)なし、もしくは NO87 環境変数で コプロを使わせない状態で実行すると、tan 関数の計算結果が一部不正になります。 また直前の cos 関数を外すと正常に動作します。
コプロセッサを使用した状態、あるいは直前に cos 関数を使用しない時は tan 関数は 0.404... を返しますが、コプロセッサを使用せず、直前に cos 関数が実行されてい ると i が 10 から 18、28 から 36 の時の演算結果が正負が逆転して返されます。

再現プログラム

  #include <math.h>
  #include <stdio.h>
  #define  PI  3.141592653589793
  void main( void )
  {
     double  theta, t1, t2;
     int     i;
     for( i = -9; i <= 36; i++ ){
      t1 = cos( theta = (double)i * PI / 18.0 );
      t2 = tan( 22.0 * PI / 180.0 );
      printf("\ni = %3d theta = %6.3lf t1 = %6.3lf t2 = %6.3lf",i,theta,t1,t2);
     }
  }

原因

エミュレータライブラリの障害です。

対処方法

コプロセッサが使用できない環境でアプリケーションプログラムを使用する可能性が ある場合には、tan() を sin()/cos() に書き換えてください。

Keywords: KBBUG VC10 VC15 KB401957
Technology: kbAudDeveloper kbvc150 kbVCsearch

inserted by FC2 system