【问题标题】:Is this a bug in mpf_class types?这是 mpf_class 类型中的错误吗?
【发布时间】:2012-10-30 15:29:12
【问题描述】:

我今天在玩更高精度的 mpf_class 数据类型时遇到了一件奇怪的事情:似乎 complex <mpf_class> 对象与 @987654322 的任何 预乘法 不止一次@ 类型是有问题的,但是单个预乘是可以的,就像这些对象与多个 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;

}

如果您预乘这些mpf_class 对象中的complex 不止一次,您就会遇到麻烦。然而,后乘法多次都很好。同样,将 mpf_class 对象之间相乘也可以任意倍数。

这是怎么回事?

【问题讨论】:

    标签: overloading complextype mpf


    【解决方案1】:

    std::complex 仅对 T = float、double 或 long double 显示明确定义的行为。如果您使用其他类型,则行为未定义。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2013-05-04
      • 2011-09-28
      相关资源
      最近更新 更多