精华内容
下载资源
问答
  • C语言 单精度和双精度实数输出

    千次阅读 2019-02-04 10:50:26
    C语言 单精度和双精度实数输出 有意义数字和无意义数字的演示

    类型转换字符%f的使用。

    #include <stdio.h>
    
    int main()
    {
        float  f=123.456;
        double d1,d2;
        d1=1111111111111.111111111;
        d2=2222222222222.222222222;
        printf("%f\n%12f\n%12.2f\n%-12.2f\n%.2f\n",f,f,f,f,f);
        printf("d1+d2=%f\n",d1+d2);
       
       return 0;
    }   
    

    运行结果:
    C语言在线编辑+运行
    在这里插入图片描述

    本案例程序的输出结果中:
    数据123.456001和3333333333333.333010中的001和010都是无意义的,因为它们超出了有效数字的范围。

    为什么这么说?

    1.什么是有效数字?
    从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字。
    如:0.0109,前面两个0不是有效数字,后面的109均为有效数字(注意,中间的0也算)。
    再如:3.109,3 1 0 9为有效数字。
    ——————————————————————————————————————————————————————————
    2.在C语言中如何使用有效数字的?
    %f 输出7位有效数字,%.Nf 最多也就16位有效数字。
    也就是说一个浮点型【float】变量只能保证有效数字是7位,整体只有前7位是准确数字【或者说有效数字,有意义的数字】,超出的数是没有意义的。不同的编程工具显示的结果(指的是无意义的数字)也是有可能不相同的。
    %f 默认保存6位小数,不够用0来补。

    3.什么是有意义的数字?
    你想啊,你定义的数字比如 f1=123.456,那么有意义的参与运算的数字就是123.456。只不过叫它为6位有效数字而已。
    其他的输出除去123.456的部分都是无意义的。因为123.456是有效数字,所以它是有意义的。

    案例演示:目的是为了f1=123.456打印为什么是123.456001而不是123.456000。
    图片:
    在这里插入图片描述

    #include <stdio.h>
    
    int main()
    {  
        float f1 = 123.456,f2 = 123.4567,f3 = 123.45678;
        printf("f1=%f\nf2=%f\nf3=%f\n",f1,f2,f3);
        return 0;
    }
    

    解读:
    因为%f 输出7位有效数字,所以f1和f2都在有效范围之内,f3故意超出一位。
    输出结果:
    f1=123.456001
    其中001这个随机数字是编程工具加上去的,它不是我们定义的格式控制符认为合法的有效数字,故无意义。
    输出结果:
    f2=123.456703
    其中03这个随机数字也是编程工具加上去的,它也不是我们定义的格式控制符认为合法的有效数字,故无意义。
    输出结果:
    f3=123.456779 而我们定义的是123.45678,
    因为%f 输出7位有效数字,f3故意超出一位,所有后面的79这个随机数字也是编程工具加上去的,它也不是我们定义的格式控制符认为合法的有效数字,故无意义。

    到这里,你应该懂了:
    拿%f格式控制符的有效数字来说,只要你定义的有效数字在7位之内,可以打印出来,但6位小数位缺少的会是编程工具产生的无意义的随机数。即使你的有效数字是8位,也只展示正确的前7位,余下的也是编程工具产生的随机数。

    案例演示:什么时候补0
    首先要搞清楚为什么会有补0这个说法?
    为了使输出的数字有意义,如果都是0。那就变成整型了。所以为了控制这种误差,会补0确定精度。
    结果:
    在这里插入图片描述
    一步一步加点东西,变得复杂一点的:
    在这里插入图片描述
    关键词: %f 有效数字 默认补0 【关键词的作用就是减少说话篇幅,压缩信息,你自己能脑补信息解压信息】
    输出结果:
    f0=987.000000
    为了标识它是浮点类型,补了6个0;

    输出结果:
    f1=1.123000
    f2=2.123400
    f3=3.123450
    f4=4.123456
    f1,f2,f3都在有效数字范围之内,小数位数补了0是编辑器加上的,不同的数补的不一样比如 123.456 补的是 123.456001。
    f4满打满算,7个有效数字正好,什么都不用加。

    输出结果f5:
    f5=5.234568
    f5超出了有效数字,也超出了默认支持6位小数,触发了四舍五入的机制,所以:
    最终 有效数字 + 四舍五入 双剑合一,得出最终结果:
    f5=5.234568

    输出结果:
    f6=56.123322
    实际定义的:
    f6=56.123321
    你应该懂了,【学习能力】,
    结合 有效数字就可以明白,编程工具只展示 56.12332 这7个有效数字,后面那个2是无意义的,所以展示的是一个随机值。
    假设把f6=56.123321 最后的1删了会怎么样?
    定义成 f6=56.12332,
    输出成 f6=56.123322
    在这里插入图片描述
    定义成 f6=56.12332,
    输出成 f6=56.123322
    结果又是多了随机值2,这是编辑器帮我们干的事情。不同的编辑器随机值可能相同,也可能不同。

    其实,这就是一个%f格式控制符,在7位有效数字合法范围之内的编辑器展示结果的分析,有的时候还会触发四舍五入的机制,有的时候是整数会默认补0。
    这个不是单一的情况你搜一下就能明白,你得自己列举多个情况并自己调试,让结果说话,别人说的可能是错的。

    代码如下:

    #include <stdio.h>
    
    int main()
    {  
    	float f0 = 987,f1 = 1.123,f2 = 2.1234,f3 = 3.12345,
    	f4=4.123456,f5=5.2345678,f6=56.123321;
    	printf("f0=%f\nf1=%f\nf2=%f\nf3=%f\nf4=%f\nf5=%f\nf6=%f",f0,f1,f2,f3,f4,f5,f6);
    	return 0;
    }
    

    ——————————————————————————————————————————————————————————
    现在再说为什么 数据123.456001和3333333333333.333010中的001和010都是无意义的,因为它们超出了有效数字的范围。【分别是7和16】

    总结成一句话:
    浮点型变量直接送7位有效数字,具体的有效数字就是你定义了多少就是多少,如果编译器展示的值的位数有偏差,那有偏差的尾巴是无意义的。记住这句话就行。

    有效数字就是你定义的数字,【想想数学要你保留3位有效数字,这3位有效数字当然是你自己写的定义】,
    后面的尾巴001是编辑器随机加上的。

    联系生活,那些做实验,经常会说在误差运行范围之内,因为计算机算的时候就存在误差,没有绝对的精确。

    ——————————————————————————————————————————————————————————
    可以忽略的相关信息:【没有代码演示实操,建议忽略不看,只做了解内容】
    对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分大于等于1、小于10,小数点占一位,尾数中的小数部分占5位指数部分占4位(如e-03),其中e占一位,指数符号占一位,指数占2位,共计11位。
    也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。

    展开全文
  • 本节内容 什么是蝴蝶效应? while循环应用。 科学计数法 课后练习题 什么是蝴蝶效应 飓风始于小风。...一只南美洲亚马逊河流域热带雨林中的蝴蝶轻拍翅膀,可以导致一个月后美国得克萨斯州的一场龙卷风。...实数就是浮

    本节内容

    1. 什么是蝴蝶效应?
    2. while循环应用。
    3. 科学计数法
    4. 课后练习题

    什么是蝴蝶效应

    飓风始于小风。
    一只南美洲亚马逊河流域热带雨林中的蝴蝶轻拍翅膀,可以导致一个月后美国得克萨斯州的一场龙卷风。

    不起眼的一个小动作却能引起一连串的巨大反应。

    初始条件极小差别,将会引起结果的极大差异。

    while应用

    n的初始值设为1,让它产生极小偏差。减0.01后得到的值是0.99,加0.01后得到的值是1.01,之后每次得到的值都是自己乘以自己。试一试编程,算一下第15次后分别是多少?

    科学计数法

    实数就是浮点数,包括正实数,负实数,实数零。

    科学计数法使用指数形式表示的:
    2900 = 2.9 * 1000 = 2.9 * 10^3 = 2.9e+3
    0.0321 = 3.12 * 0.01 = 3.12 * 10^-2 = 3.12e-2
    7.9e+2 = 7.9 * 10^2=7.9 * 100 = 790
    6.18e-1 = 6.18 * 10^-1 = 6.18 * 0.1 = 0.618
    3.14e0 = 3.14 * 10^0 = 3.14
    1.15048e-009 = 0.00000000115048
    7.08229e+008 = 708229000

    double表示双精度实数,可表示范围为-1.79e308~1.79e308

    附加题:
    判断给定正整数(保证在正整数范围内)是否是质数,如果是,则输出Yes,否则,输出No。(用while循环做)

    分析:根据数学知识,质数是这样约定的:除了1和它本身不再有其他约数的数,就是质数。

    展开全文
  • 数据类型

    2019-10-15 23:02:21
    类型说明符:float(单精度),double(双精度型),long double(长精度型). 实数的存储与取值范围 在计算机中,实数型是以浮点数形式存贮的,对于float型数据来说,很多编译器是以24位表示小数部分,8位表示指数...

    数据类型:
    在这里插入图片描述
    定义:在程序中每个数据都有具体的数据类型,方便对他们按照不同的方式进行数据处理。

    基本类型

    整型:基本整型,长整型,短整型,无符号整型。
    类型说明符:int;
    长整型和短整型通过long和short来修饰int来改变变量所占用的字节数。
    无符号整型:通过unsigned修饰符来修饰int来扩展正数的取值范围,在C语言中有符号整型变量最大为32767,无符号整型变量的最大值为65535,。无符号位的数的最高位不做处理,所以表示的数是对最高位有符号数的二倍。
    eg:int a,int b,int c;
    整型的存储与取值范围:整型数在内存中以二进制存放的。数值是以补码的形式存储的。在机器中用最高位表示输的符号,正数用0表示,负数的最高位用1表示。

    实型
    类型说明符:float(单精度),double(双精度型),long double(长精度型).
    实数的存储与取值范围
    在计算机中,实数型是以浮点数形式存贮的,对于float型数据来说,很多编译器是以24位表示小数部分,8位表示指数部分。这样,单精度实数的精度是取决于小数部分的位二进制数位所能表达的数值位数,将其转化为十进制,最多可以表示七位十进制数字,所以单精度位实数的有效位是7位。
    双精度实数占8个字节(64位)内存空间,其数值范围为|-1.7E-308~1.7E+308|,可提供16位有效数字。
    浮点的表示形式:
    在C语言中,实数表示只采用十进制。他有两种形式。

    字符类型

    C语言中的字符型数据分为字符和字符串数据两类。
    ‘a’,’‘2’,’#'等;字符串数据是指由双引号"good",“o132”,“wu”
    基本类型定义
    类型说明符:char
    字符型数据的存储与取值范围
    一个字符型数据的存储占一个字节。

    字符串的使用

    输入任意长度的三个字符串,要求统计出其中共有多少个大写字母,小写字母,空格,数字和其他字符。

    #define _CRT_SECURE_NO_WARNINGS 1
    #include"stdio.h"
    #include"string.h"
    int main()
    {
    	char  str[3][100];
    	int up = 0, low = 0, space = 0, num = 0, other = 0, i, j;
    	for (i = 0; i < 3; i++)
    	{
    		printf("input the %dth string:", i + 1);
    		gets(str[i]);
    	}
    	for (i = 0; i < 3;i++)
    	for (j = 0; j < strlen(str[i]); j++)
    	{
    		if (str[i][j]>'A'&&str[i][j] <= 'Z')
    			up++;
    		else if (str[i][j] >= 'a'&&str[i][j] <= 'z')
    			low++;
    		else if (str[i][j] >= '0'&&str[i][j] <= '9')
    			num++;
    		else if (str[i][j] == ' ')
    			space++;
    		else
    			other++;
    	}
    	printf("大写字母,小写字母,数字,空格,其他字符分别有:\n");
    	printf("up=%d,low=%d,num=%d,space=%d,other=%d\n", up, low, num, space, other);
    	return 0;
    }
    

    执行结果:
    在这里插入图片描述

    展开全文
  • 单精度和双精度的区别

    万次阅读 多人点赞 2019-02-26 16:56:24
    3、单精度和双精度表示的数的范围不同。前者的数值范围在-3.40E+38 到 +3.40E+38之间;后者的范围为-1.79E+308到+1.79E+308之间。 4、单精度和双精度处理的速度不同。前者的速度更加的快。 ...

    1、单精度和双精度的字节数不同。前者占4个字节;后者占8个字节。

    2、单精度和双精度有效数字位数不同。前者为8位;后者为16位。

    3、单精度和双精度表示的数的范围不同。前者的数值范围在-3.40E+38 到 +3.40E+38之间;后者的范围为-1.79E+308到+1.79E+308之间。

    4、单精度和双精度处理的速度不同。前者的速度更加的快。

    展开全文
  • 1.float和double的范围精度  float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下: float:1bit(符号位)+8bits(指数位+23bits(尾数位) double:1bi...
  • 一、表示方法 在计算机中,浮点数一般由三部分组成:符号位+阶码+尾数。 这种浮点数是用科学记数法来表示的,即:浮点数...(2) 双精度浮点数(64位),阶码11位,尾数53位(内含1位符号位)。 (3) 临时浮点数(80位),
  • 单精度浮点数(float)与双精度浮点数(double)的区别 单精度浮点数(float)与双精度浮点数(double)的区别如下: (1)在内存中占有的字节数不同 ...•单精度浮点的表示范围:-3.40E+38 ~ +3.40E...
  • 双精度浮点数(double)       Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省...
  • 单精度和双精度浮点数数据类型

    千次阅读 2016-07-16 09:58:44
    C、C++中使用到的单精度浮点数(float)类型和双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存分布、编码规则、取值范围、有效数字位数和...
  • “一旦浮点数的位数确定后,合理分配阶码和尾数的位数,直接影响浮点数的表示范围精度。通常对于短实数(总位数为32位),阶码取8位(含阶符一位),尾数取24位(含数符一位);对于长实数(总位数64位),阶码取...
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    111.%g是C语言printf()函数的一个输出格式类型,它表示以%f%e中较短的输出宽度输出单、双精度实数,在指数小于-4或者大于等于精度时使用%e格式 112.p++是指下一个地址。 (p)++是指将p所指的数据的值加一。 C编译器...
  • C 语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?...
  • 单精度和双精度问题

    千次阅读 2020-08-24 10:46:54
    一,什么是单精度和双精度 单精度数(float)是指计算机表达实数近似值的一种方式。VB中Single(单精度浮点)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1....
  • 二、了解IEEE 754双精度浮点数规范 1) 通过2进制的科学计数法存储。 和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N。其中需要留意下二进制科学计数法的整数部分都是1,所以在存储时省略整数部分1。...
  • 7-9 计算存款利息

    千次阅读 2020-02-26 13:15:55
    3、double 为双精度浮点,能准确到小数点都十二位 。 4、char 为字符,用于定义字符类型的数据。 二、内存占据: 1、int 的内存大小是 4 个 byte。 2、float 内存大小是 4 个 byte。 3、double 的内存...
  • 单精度型Single 存储有符号的 IEEE 32 位(4 个字节)单精度浮点数, 负数取值范围为 -3.4028235E+38 到 -1.401298E-... 双精度型Double 存储带符号的 IEEE 64 位(8 个字节)双精度浮点数, 负值取值范围为 -1.797693
  • 浮点数7位有效数字。 双精度数16位有效数字。 浮点数取值范围: 负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。 双精度数取值范围: ...C/C++中浮点数的表示
  • 编程的时候,有时需要知道两种数据数据表示范围和表示精度,下面给出两种结果的求解过程。 浮点格式 精度和范围与数据的存储格式密切相关,所以我们先来看一看它们的存储格式: 对于float类型的变量,其底层的存储...
  • 双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308 单精度实数在内存中占32bit 有效数字为6 ~ 7位,双精度实数占内存单元为64bit 有效数字为15 ~ 16位,没有说明时,实型常量是作为双精度处理的,若要使用单精度需在...
  • 浮点数: 它是用来表示实数的一种方法,它用 M...浮点数有多种实现方法,计算机中浮点数的实现大都遵从 IEEE754 标准,IEEE754 规定了单精度浮点数和双精度浮点数两种规格,单精度浮点数用4字节(32bit)表示浮...
  • 2021-6-3 单精度双精度

    2021-06-03 09:18:21
    单精度是这样的格式,1位符号,8位指数,23位小数。 双精度是1位符号,11位指数,52位小数。
  • Fortran中的浮点数,默认是单精度数,也就是6-7位的精度。双精度数有15位 注意,只要你写的是2.0,1.0之类的数字,就默认是单精度,并且不会强制类型转换 什么意思呢? 看这样一个例子 program try implicit none ...
  • C语言的键盘输入和屏幕输出

    千次阅读 2019-06-10 10:14:29
    键盘输入和屏幕输出是编写简单的顺序结构程序时最常用到的操作。C程序中的键盘输入和屏幕...再如,‘3’表示一个字符常量,而3则表示一个整数。 把字符放在一对单引号的做法,适用于多数可打印字符,但不适用于某些...
  • 双精度浮点数的有效位数是16位。 单精度最少有6位有效数字(最小尺寸)。 双精度的有效位数最少15位 一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M。 单精度...
  • 一、进制表示 整数 public class Demo03 { public static void main(String[] args) { //二进制0b 十进制 八进制0 十六进制0x int i = 10; int i2 = 010; // 八进制0 int i3 = 0x10;// 十六进制0x ...
  • MySQL中的实数类型

    2020-06-02 20:48:43
    MySQL有3种实数类型:float(表示单精度浮点数值)、double(表示双精度浮点数值)、decimal(定点)。MySQL不管是浮点还是定点,都可以用类型名+(M, D)进行定制化表示,其中M表示该值的总共长度,D表示小数点...
  • 浮点数的表示以及运算

    千次阅读 2019-09-21 09:52:39
    在位数一定的情况下,若指数位越多,可表示数的范围就越大;尾数越多,可表示数的精度越高。 浮点数的一般机器格式 数符 阶符 阶码值 尾数值 Ms Ej En-1…………E0 M-1…………-m 1位 1位 n位 m位 Ms是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,088
精华内容 2,435
关键字:

双精度型实数的表示范围