我在 Unix 上编程,使用 g++ 4.8.2 编译器。我目前需要将此时使用的 C++ 程序long double
(在我的情况下有效位为 64 位)转换为使用该__float128
类型的程序(有效位为 113 位)。我使用libquadmath0
包和 boost 库来做到这一点,但生成的程序比 with 慢 10~20 倍long double
。
double
这很令人困惑,因为有效数字的大小并没有高很多,而且我在从 切换到时没有观察到这种差异long double
。这种时间差异是否正常,如果不是,我该如何解决?
编码:
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <math.h>
#include <complex.h>
extern "C" {
#include <quadmath.h>
}
#include <gmp.h>
#include <iomanip>
#include <cfloat>
#include <boost/multiprecision/float128.hpp>
using namespace boost::multiprecision;
using namespace std;
typedef __float128 long_double_t;
void main()
{
...
}
编译说明:
g++ --std=c++11 main.cc -o main -lgmp -lquadmath -Ofast -m64