Tag: long double

C – long double和printf问题

我是新的C程序员,我正在研究一个学校项目,我必须接近值或pi。 我的教授表示我们必须使用long double声明所有整数项。 控制台显示我询问用户在给定函数时接近pi的项数。 我输入1作为术语数,但代码返回-0.00000000而不是4.00000000。 #include #include long double approx1(int terms) { long double pi = 0; long double num = 4; long double denom = 1; int i; for(i=1; i 0) { pie = approx1(terms); printf(“%.8Lf\n”, pie); printf(“GG mate\n”); break; } else { printf(“Incorrect input, please enter a correct input\n”); scanf(“%d”, &terms); } } […]

如何使用Cython强制使用长双打?

我提前为我对C的不良知识道歉:我使用Python编写代码,并使用标准C函数编写了一些Cython模块,以大大提高速度。 但是,我需要一个高于1e308的范围(是的,你读得对),这是我目前通过使用类型double complex和函数cexp和cabs 。 我试图使用函数cexpl和cabsl ,并声明我的变量是long double complex类型,但是在1e308之后我仍然遇到溢出。 这可能意味着我的编译器将长双精度转换为双精度数,是吗? 但根据维基百科, 使用GNU C编译器,x86处理器的长双精度是80位扩展精度,无论该类型使用的物理存储器是什么(可以是96位或128位)。[4] 我正在使用带有Linux Linux的64位系统(如果重要的话,还有Python 2.7.8)。 如何编写强制使用长双打的Cython模块? 对于我正在做的一些科学计算,我需要这么大的数字。 编辑:使用标志-m128bit-long-double进行编译会得到相同的结果。 如此处所示, 在x86-64编译器中,-m128bit-long-double是默认选择,因为它的ABI指定long double要在16字节边界上对齐。 所以这似乎没什么区别。 我还运行了以下程序来检查系统上的范围: #include #include int main() { printf(“Storage size for float : %d \n”, sizeof(float)); printf(“Minimum float positive value: %E\n”, FLT_MIN ); printf(“Maximum float positive value: %E\n”, FLT_MAX ); printf(“Precision value: %d\n”, FLT_DIG ); […]

x86-64长双精度

在英特尔64位平台上,long double的实际精度是多少? 是80位填充到128或实际128位? 如果是前者,除了去gmp之外,还有其他选择来实现真正的128精度吗?