永发信息网

C语言中怎么让100000000000.00+0.000000000001=100000000000.000000000001

答案:3  悬赏:0  手机版
解决时间 2021-04-04 21:23
  • 提问者网友:原来太熟悉了会陌生
  • 2021-04-04 14:33
C语言中怎么让100000000000.00+0.000000000001=100000000000.000000000001
最佳答案
  • 五星知识达人网友:不如潦草
  • 2021-04-04 15:13
这个单纯的C 和标准库是无法做到的,IEEE定义的浮点数中最长的也只有16个字节,目前是无法放下
100000000000.000000000001
的所有的有效数字的。


可以使用一些其它的科学运算的库来做到。但是呢,最后这个尾数真的这么重要?
#include

int main()
{

        long double a,b,c;

        a = 100000000000.00;
        b = 0.000000000001;
        c = a + b;

        printf("%.13Lf
",c);
        printf("sizeof(long double)=%d
",sizeof(long double));
        return 0;
        //输出:
        //100000000000.0000000000000
        //sizeof(long double)=16



}追问好吧。。。我想知道怎么能做到 而且是用简单的方法
我测试了你的 这个程序 结果好夸张追答如果是在Linux 有GMP可以用
#include 
#include 
#include 
 
int main()
{
 mpf_t x;
 mpf_t y;
 mpf_t result;
 
 mpf_init2(x,800);
 mpf_init2(y,800);
 mpf_init2(result,800);
 
 mpf_set_str(x, "1e11", 10);
 mpf_set_str(y, "1e-11", 10);
 
 mpf_add(result, x, y);
 gmp_printf("
    %.12Ff
+
    %.12Ff
--------------------
%.12Ff

", x, y, result);
 
  
 mpf_clear(x);
 mpf_clear(y);
 mpf_clear(result);
 return EXIT_SUCCESS;
}
//输出:
//    100000000000.000000000000
//+
//    0.000000000010
//--------------------
//100000000000.000000000010 
编译时记得加上  -lgmp,比如文件名是  gmp_mpf_test.c
就这么搞

gcc  gmp_mpf_test.c -lgmp  -o gmp_mpf_test追问我编译后提示找不到gmp.h文件?是不是要安装什么库
全部回答
  • 1楼网友:行雁书
  • 2021-04-04 17:35
在8字节int平台下直接做就是了;在4字节int平台下无法直接做了,只能用字符串自己一位一位做……追问什么叫直接做?追答直接做就是很普通地做呀,不用犯愁,+就+,-就-,x就x,÷就÷,就你你3+5/4*10一样写表达式就行了!追问做给我看看
  • 2楼网友:由着我着迷
  • 2021-04-04 16:43
用long float定义上述浮点型变量试试;追问GCC环境下没有long float !!!追答......
好吧
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯