求C语言小数精确计算

求C语言小数精确计算,第1张

你好,在埋卜编程中不要指望去得到一个精确的数字,而应该是顶一个误差范围(相对误差)。如 double eps = 0.000000001然后弯毕穗再把数字与 eps 比较。

if((68 - n)<eps)即认为 n = 68;。当数埋然,这是人工处理。如果想得到精确数字,可以用 Boost 库。

这个要看小数按什么格式输入。

如果按%s输入,也就是按字符串格式输入,先找到小数点的位置,然后统计下小数点后数字的长度。

具体实现可参考颤配:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(int argc, char* argv[])

{

    char a[128]

    while(scanf("%s",a)!=EOF)

    {

        if(strstr(a,".")!=NULL)

        printf("%d\n",strlen(strstr(a,".")+1))

        else 

        printf("0\n")

    }

    system("pause")

    return 0 

}

如果按%f(对应float类型小数)或者%lf(double类型的小数)方式读入,则需要先去掉整数部分,然后看小数部分一直乘10减去整数部分,知道等于0,统计,乘了几次10,启或但是由于浮点数在计算机中存的并不是准确值,这个往往得不到正确的结果。可以使用sprintf(str,"%g",f),然后由于f毕竟不是准确值,还是会出现有些问题,源码如下:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(int argc, char* argv[])

{

    char a[128]

    float f

    while(scanf("%f",&f)!=EOF)

    {

     茄旁指   sprintf(a,"%g",f)

        if(strstr(a,".")!=NULL)

        printf("%d\n",strlen(strstr(a,".")+1))

        else 

        printf("0\n")

    }

    system("pause")

    return 0 

}

这是最后一个已经出现错误,所以遇到要精确判断小数点的位数,最好直接按字符串读入,这和图灵机的工作原理暗暗相合。

在C语言中整数没有除法,只有取商(/),取余(%),所以,也没有什么舍入,2/3=0,3.2/2=1.6(2也是浮点数,因为不同数据类型的数是不能参与运算的),1.50000*6=9.0(同理,6也是浮点数)。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供隐禅一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

丹尼斯·里奇, C语言之父,UNIX之父。1978年与布莱恩·科尔尼干(Brian W. Kernighan)一起出版了名著《C程序设计语言》《The C Programming Language》,此书已翻译成多种语言,成为C语言方面最权威的教材之一。2011年10月9日,丹尼斯-里奇去世,享年70岁。

C语言的运键咐算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读稿携纯,关键原因就是对运算符和运算顺序理解不透不全。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12448037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存