0

今日、データ型のより高い精度の mpf_class で遊んでいるときに奇妙なことに遭遇しました。型によるオブジェクトの複数回の事前乗算には問題があるようですが、ポストと同様に、単一の事前乗算は問題ありません-これらのオブジェクトを複数のオブジェクトで乗算:complex <mpf_class>mpf_classmpf_class

#include <stlib.h>
#include <complex>
#include <gmpxx.h>

typedef  mpf_class my_float;
const my_float two("2.0",150);  //150 bit prec float

int main( int argc , char **argv )
{      
  mpf_set_default_prec(150); //default prec in bits

  complex<my_float> q1(my_float("5.268E-10"),my_float("8.789541E2"));
  complex<my_float> q2=two*q1;          //no problems
  complex<my_float> q3=q1*two;          //no problems
  complex<my_float> q3b=two*two*two;    //no problems
  complex<my_float> q4=two*q1*two;      //no problems
  complex<my_float> q5=q1*two*two;      //no problems
  //complex<my_float> q6=two*two*q1;    //!doesn't like!
  //complex<my_float> q7=(two*two)*q1;  //!doesn't like!
  complex<my_float> q8=-two*q1;         //!doesn't like!       

return 0;

}

これらのオブジェクトを複数回事前乗算すると、問題が発生するようです。それでも、事後乗算は何度でも問題ありません。同様にオブジェクト同士の掛け算も何度でもOKです。complexmpf_classmpf_class

ここで何が起こっているのですか?

4

1 に答える 1

0

std::complex< T > は、T = float、double、または long double に対してのみ明確に定義された動作を示します。他のタイプを使用する場合、動作は未定義です。

于 2012-11-01T22:41:54.523 に答える