这是mpf_class类型中的错误吗?

时间:2012-10-30 15:29:12

标签: overloading complextype mpf

今天我在使用更高精度的mpf_class数据类型时遇到了一件奇怪的事情:似乎任何 pre-multiplication ,不止一次是complex <mpf_class>个对象的mpf_class类型存在问题,但单个预乘可以很好,这些对象后乘几个mpf_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;

}

如果您在遇到麻烦时多次预先繁殖<{1}}这些complexmpf_class个对象。然而,后乘法很多次。同样地,将mpf_class个对象相乘也可以多次使用。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

的std ::复杂&LT; T>仅显示T = float,double或long double的明确定义的行为。如果使用其他类型,则行为未定义。