我正在尝试用C语言做25位数的加法。我得到的结果与预期的可能原因数据类型略有不同。
/* Online C Compiler and Editor */
#include <stdio.h>
int main()
{
long double result;
long double a;
long double b;
a = 51680708854858333333;
b = 83621143489848333333,
result = a + b ;
printf("Hello, World!\n");
printf("can be written %.0Lf\n", result);
return 0;
}
2条答案
按热度按时间ggazkfy81#
你可以用小学里教过的方法来做:
pxy2qtax2#
你的代码中有一个小问题:用于初始化
long double
变量的文字51680708854858333333
和83621143489848333333
实际上被解析为整数,并且它们都超过了最大整数类型long long int
,即9223372036854775807
。您必须添加尾随
.
以使它们成为浮点常量,并添加L
以使long double
成为常量。然后,您将获得更接近精确值的结果,受long double
类型的精度限制:我的macbook上的输出显示了
long double
类型的有限精度,使用M2芯片的默认编译器链:为了更好的精度,你应该使用bignum包,但是对于25位数,如果你的编译器支持的话,你可以使用128位整数:
输出: