我今天在玩更高精度的数据类型 mpf_class 时遇到了一件奇怪的事情:似乎任何类型的对象多次预乘都是有问题的,但是单次预乘很好,就像 post - 这些对象乘以几个对象: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;
}
似乎如果你不止一次地预乘complex
这些对象中的一个,你就会遇到麻烦。mpf_class
然而,后乘法多次都很好。同样,将对象之间相乘mpf_class
也可以任意多次。
这里发生了什么?