精华内容
下载资源
问答
  • ![图片说明]... 这段代码转成C语言行不通。。在C语言我试了缩小x的范围,整体都缩小了才能运行出正确答案。。 C语言跟JAVA还存在这方面的区别??
  • 题目链接:3的幂 题目描述:给定一个整数,写一个函数来判断它是否是 3 的幂次方。 要求不用循环或递归,O(1)判断。 有各种奇奇怪怪的方法,打...C语言的log只有以10和e为底的,其他要用换底公式,如: log3(n)=lo...

    题目链接:3的幂
    题目描述:给定一个整数,写一个函数来判断它是否是 3 的幂次方。
    要求不用循环或递归,O(1)判断。

    有各种奇奇怪怪的方法,打表int范围内的3的次幂比对,int范围内最大的3的次幂一定是n倍数,求log3(n)是否为整数,三进制判断是否只有首位为1等等。

    我用了判断log3(n)是否为整数的方法。

    C语言的log只有以10和e为底的,其他要用换底公式,如:
    log3(n)=logx(n)/logx(3)log_3(n)=log_x(n)/log_x(3)

    讲道理这里的log用log10和log应该是一样的
    但是!!
    log是以e为底,会有精度损失!(为什么??
    所以换底公式就还是用log10吧。emmmmm

    展开全文
  • C语言精度数值问题

    2019-01-06 15:44:16
    #include<stdio.h> int main() { int a; long long b double d; long double e; scanf("%d",&a); scanf("%lld",&b); scanf("...int
    #include<stdio.h>
    int main()
    {
    	int a;
    	long long b
    	double d;
    	long double e;
    	scanf("%d",&a);
    	scanf("%lld",&b);
    	scanf("%lf",&d);
    	scanf("%Lf",&e);
    	return 0;
    }
    

    int 4字节 32位
    long long 8字节 64位
    double 64位
    long double 96位 部分编译器80位左右吧

    展开全文
  • C语言中浮点数精度问题分析摘 要: 通过实例直观地描述了C语言中由于计算机存储数据方式的不同而造成的数据误差,并对误差产生的原因进行了分析,解读出C语言中浮点型数据的不同存储方式,最后给出几点建议。...

    C语言中浮点数精度问题分析

    摘 要: 通过实例直观地描述了C语言中由于计算机存储数据方式的不同而造成的数据误差,并对误差产生的原因进行了分析,解读出C语言中浮点型数据的不同存储方式,最后给出几点建议。

    关键词: C语言;数据精度;浮点型数据;相对误差

    中图分类号: TP312 文献标识码: A 文章编号: 2095-8153(2015)03-0097-03

    作者简介: 周冠方(1984-),男,郧阳师范高等专科学校组织人事部助教。

    1 引言

    C语言程序设计的基本数据类型包含整型和浮点型两类。在计算机中,实数特别是小数形式表示的数都是以浮点型数据来进行存储的。但是对于浮点型的数据,在进行各种运算时,因为计算机的二进制存储特性,会导致出现精度丢失的现象。这种现象直接影响到程序结果的准确性和可靠性。

    2 C语言中数据类型转换带来的影响

    先来看一个简单的例子:需要求解A=4/5的值,这个结果很简单,A=0.8。而在C语言中,我们写出它的计算程序:

    Main()

    {

    Float A;

    A=4/5;

    Printf(“A=%f\n”,A);

    Return 0;

    }

    结果:A=0.000000

    从算法的角度来看这个程序没有问题,但是最终运行的结果却和我们的理论值完全不相符。这是为什么呢?

    分析:在此程序中两操作数4和5均为整型,运算结果应该为0.8,但是在C语言程序编写中有这样一个规则,C语言中计算的源数据为整形数据,最终输出结果也应该为整形数据。 “4/5” 的结果0.8在C语言中会被转换后得到一个int型的中间变量,它的值等于“4/5”的整数部分,其小数部分则被进行截尾操作,即舍弃整个小数部分,最终存储值为0。程序将这个整型的运算结果赋给A这个float型变量,将其强制转换为float型输出,所以最终运算结果成了A=0.000000。

    如果我们需要去确保最终输出结果的正确性,我们就必须在计算的过程中就将中间的操作数据更改为浮点型数据,来确保最终结果数据和中间操作数据的数据类型的同质性。

    此例有两种简单的解决办法:

    1)将“A=4/5”改成“A=4.0/5.0”;

    2)将“A=4/5”改成“A=(float)4/5”。

    即可得出最终正确的值A=0.800000。因此,如果我们遇到因为C语言程序设计中,不同数据类型之间的计算问题时,我们必须规定明确的数据类型,并且在算法编写的过程中,通过人为的数据类型变更的方法,确保程序计算中过程值和结果值的数据类型的同质性,从而达到保证计算精度准确的目的。

    3 C语言中存储位数溢出的控制

    同样的例子,我们做一个简单的修改:

    Main()

    {

    Float A;

    A=(float)4/5;

    Printf(“A=%10.8f\n”,A);

    Return 0;

    }

    我们将输出结果限定为10位有效数字,小数点后有效数字为8位。程序运行后得到结果为:A=0这显然也不是我们想要的结果:A=0为了知道这个原因,我们就必须了解C语言中浮点类型数据的存储格式要求。

    3.1 C语言中浮点类型数据的存储格式

    C语言中的浮点数是以IEEE 754标准的格式存储,与整型数据的存储完全不一样。

    3.1.1 单精度浮点型数据

    C语言中对float型数据(4个字节)的表示分为三个部分:符号S,阶码E,尾数M。具体如下(见表1):

    1)最高位31位,保存符号位S,“0”表示正数,“1”表示负数。[1]

    2)30位~23位,共8位,移码方式(指数值加上偏移量127)保存指数部分,称为阶码。

    3)22位~0位,共23位,保存系数部分,称为尾数,对于规范化二进制数,整数位的前导“1”不保存(隐含),直接保存小数部分b1b2…b23。

    实际上即是将十进制数R在计算机中用二进制数的科学计数法表示出来:R=(-1)S×M×2E。

    而在float类型的数据中,它的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

    float:2^23 =8388608,一共七位,106>8388608>107这意味着最多能有7位有效数字,但绝对能保证的为6位,即float的精度为6~7位有效数字。因此,当我们用“A=%10.8f\n”来控制输出结果的小数位数为8位时,就会出现精度丢失的问题,即多出来了0

    Float型的一些特殊约定: [2]

    1)当E=0,M

    展开全文
  • 有关C语言精度问题

    千次阅读 2018-05-06 14:59:50
    通常会在程序开始部分规定一个精度EPS,计算结果在这个误差值正负范围内,则为正确,若超出这个范围,则错误。下面就是一个需要考虑误差的程序例子:求一元二次方程ax^2+bx+c=0的解(分相等实根和不等实根情况)。...

          再精准的仪器都会有误差,包括计算机,所以在写程序时要考虑到误差值。通常会在程序开始部分规定一个精度EPS,计算结果在这个误差值正负范围内,则为正确,若超出这个范围,则错误。下面就是一个需要考虑误差的程序例子:求一元二次方程ax^2+bx+c=0的解(分相等实根和不等实根情况)。

    (1)a=0,则x1=x2=(-c)/b;

    (2)a不等于0:b^2-4ac>0;有两个不等的实根

                              b^2-4ac<0;无实根

                              b^-4ac=0;有两个相等的实根

    因为考虑了误差,所以需要将0换成规定的EPS,具体如下:


    展开全文
  • C语言中float精度问题探究

    千次阅读 2019-02-26 23:10:55
    对于精度要求较高的开发场景,C中的浮点数精度问题需要特别注意。对于有很多经验的开发者而言,可能只知道C语言的float精度在6-7位之间,为什么是7?为什么又是6-7?网上的文章大部分一大抄,而且很多也不准确。本人...
  • 如题,在进行C语言编程时,在一个循环计算中b值我用手算是0.00003648249,而c语言计算值是0.00003650136900,虽然看起来很小,但在后续计算中影响很大,如何保证该数的计算精度,相关代码如下,运行环境是vs上的原始...
  • 网上看到的这个算法,我在中间注释了不懂的地方,求大神梳理思路 ``` #include #include int main() { int a[3000];//用来存储阶乘后的数 int n,i,j; int c = 0;//起初将进位设置为0 ...```
  • C语言移位运算符精度问题

    千次阅读 2015-04-23 22:37:40
    但是,在运用移位运算符的过程中需要考虑到精度问题,有可能在移位的过程中,损失掉了精度。 正是没注意到该问题的存在,导致了在一个项目中一个bug的产生。特此记录。等价左右移位大家都知道左移n位相当于乘以2的...
  • 蓝桥杯–c语言精度加法问题 问题描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理...
  • C语言中的精度问题

    2016-09-20 11:52:50
    C语言进行浮点类型运算时,为什么结果会出现这样的情况?
  • c语言中float精度问题

    2015-07-06 22:55:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 用strtod时,同样的有效数字,只要夹杂了小数点精度就会下降。请问怎么解决? 比如下面第一部分所有的有效数字都在小数点以后,正常输出。 第二部分,所有有效数字都在小数点以前,正常输出。 但是 最后一...
  • C语言中浮点数的精度问题

    千次阅读 2018-05-07 13:39:39
    1.浮点数出现精度问题的原因:浮点 字节数 有效数字位float46double815实际上一般选用double类型,double有15位有效数字若输入的数字为16位则会有误差。int main() { double a=9999999999999999; printf("%...
  • 浅谈c语言中浮点数的精度问题

    千次阅读 2018-05-06 12:09:14
    众所周知,在生活中常常出现因精度而产生的各种问题,如流水线生产出现个别产品量的缺少等,这是无法避免的,因此常常规定,只要保证误差在一定范围内就算合格。在c语言中也会存在类似的...浮点数存在精度问题,如...
  • C语言精度问题怎么解决?#include #include #include int main(){int count=0;double x1,x2,a,b,c,san,A,B;//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);for (;;){scanf("%lf",&a);count++...
  • C语言精度小数

    2019-10-03 16:43:49
    由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。 (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将相除的结果以多个...
  • (如果显示有问题,可以参见【图1.jpg】) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法。 这个算式一共有多少种...
  • C语言笔记:高精度计算问题

    千次阅读 多人点赞 2019-10-24 16:03:10
    文章目录C语言中大数据类型的简述高精度加法 C语言中大数据类型的简述 我们知道,计算机内部直接使用int或者double等数据类型存储数据是有范围限制的,当运算数据较大时,计算机将会出现溢出情况,使得计算结果...
  • c语言精度小数

    2020-04-23 22:55:32
    由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。 (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将相除的结果以多个...
  • c语言题目,float精度问题

    千次阅读 2013-09-03 22:57:40
    C语言中,单精度型数据有效数字约是6~7位,数值范围是约-3.4e-38——3.4e+38,怎么得出来的???求解 这个比较复杂,建议你找一下 IEEE754标准 看一下。 这个简单说一下吧: 在 IEEE754标准 中进行了 单精度...
  • 浮点数精度问题 例子: #include “stdio.h” int main() { float a=123456789; printf("%f",a); } 结果: 说明浮点数存在误差问题–浮点数的误差EPS //方程的根有两个,不能返回 void Fun(double a,...
  • C语言精度加法

    2020-06-28 17:44:27
    问题描述  输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 算法描述  由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。  定义一个数组A,A[0]...
  • <p><img alt="" height="227" src="https://img-ask.csdnimg.cn/upload/1612271835609.png" width="564" />就是想知道为什么会多出个10</p>
  • C语言精度算法

    万次阅读 多人点赞 2014-08-18 12:30:07
    笔者笔者去年总结了Pascal里有关高精度计算的问题,首先高精度计算可以解决以下四个问题:    1. 加数,减数,运算结果的输入和存储:  运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来...
  • 采用代码穷举测试。 测试结论如下: 1、整数部分为1位时,小数部分第7位开始失真。9.0000001经过转换后为9.000000 2、整数部分为2位时,小数部分第1位开始失真。99.100000 经过转换后为 99.099998 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 670
精华内容 268
关键字:

c语言精度问题

c语言 订阅