我有中等大小的C99程序,它使用long double
类型(80位)进行浮点计算。我想通过新的GCC 4.6扩展__float128
提高精度。就我所知,它是一个软件模拟的128位精度数学。如何在x86和x86_64上使用Gcc 4.6.0 libquadmath和__float128
我应该如何将我的程序从经典的80位双精度长度转换为128位四精度浮点运算以及全精度软件仿真? 我需要改变什么?编译器标志,来源?
我的计划有充分的精度值读数与strtod
,他们做了很多不同的操作(如+ - * /正弦,余弦,从<math.h>
EXP等)和printf
-ing他们。 PS:尽管float128仅用于Fortran(REAL * 16),但libquadmath是用C编写的,它使用了float128。我不确定GCC是否将float128上的操作转换为运行时库,并且我不确定如何从源代码中的long double迁移到__float128。
PPS:有上 “C” 语言的gcc模式的一个文档:http://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html
“GNU C编译器支持... 128位(TFmode)浮点类型对其他类型的支持包括算术运算符: 加,减,乘,除;一元算术运算符,关系运算符;平等服务商... __float128类型都支持在i386,x86_64" 的
libquadmath在这里http://gcc.gnu.org/onlinedocs/libquadmath/index.html#toc_Top这里是关于这个http://gcc.gnu.org/gcc的消息-4.6/changes.html“GCC现在附带LGPL许可的libquadmath库,该库为__float128数据类型的目标提供四精度数学函数__float128可用于32位x86,x86-64和Itanium体系结构上的目标。 “ – osgx
转而基本操作由'glibc/soft-fp'完成,例如'__subtf3()'http://koala.cs.pub.ro/lxr/#glibc+2.9/soft-fp/subtf3.c# L35 http://gcc.gnu.org/wiki/Software_floating_point – osgx
使用libquadmath,您可以使用[strtoflt128](http://webcache.googleusercontent.com/search?q=cache:P0PwG_dRv4EJ:gcc.gnu.org/onlinedocs /libquadmath.ps.gz+&cd=1&hl=zh-CN&ct=clnk&client=ubuntu)作为'strtod'替换ENT。 –