精华内容
下载资源
问答
  • 该函数将计算相应的摄氏温度和绝对温度,并以小数点右边有两位数字精度显示着三种温度。它该用每个值所代表的温度刻度来标识这3个值。下面是将华氏温度转换成摄氏温度的方程: Celsius=1.8*Fahrenheit+32.0 通常...

    编写一个程序,该程序要求用户输入一个华氏温度。程序以double类型读入温度值,并将它作为一个参数传递给用户提供的函数Temperatures()。该函数将计算相应的摄氏温度和绝对温度,并以小数点右边有两位数字的精度显示着三种温度。它该用每个值所代表的温度刻度来标识这3个值。下面是将华氏温度转换成摄氏温度的方程:

    Celsius=1.8*Fahrenheit+32.0

    通常用在科学上的绝对温宿的刻度是0代表绝对温度,是可能温度的下界。下面是将摄氏温度转换成相对温度的方程:

    Kelvin=Celsius+273.16

    Temperatures()函数将用const来创建代表转换里的3个常量负号。main()函数将使用一个循环来允许用户重复地输入温度,当用户输入q或其他非数字值时,循环结束。}}

     

    #include<stdio.h>

    void Temperatures(double n)

    {

             constdouble N=1.8;

             constdouble M=32.0;

             constdouble K=273.16;

             doubleCelsius,Kelvin;

             Celsius=(n-M)/N;

             Kelvin=Celsius+K;

             printf("%.2f℉=%.2f℃=%.2fT\n",n,Celsius,Kelvin);

    }

     

    void main()

    {

             doubleFahrenheit;

             printf("请输入华氏温度\n");

            

             while(scanf("%lf",&Fahrenheit))

             {

                       Temperatures(Fahrenheit);

                       printf("请输入华氏温度\n");

             }

    }

    在编译的过程中发现一直得不到正确的结果,然后查看资料和数字改动终于知道哪个地方出错了,原来double类型的格式转换符是%lf而不是%f,还有要输入q或其它非数值字符时,循环结束。发现这个while(scanf("lf",&Fahrenhiet))可以实现。。

    展开全文
  • 单精度和双精度浮点数数据类型   C、C++中使用到的单精度浮点数(float)类型双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存...

    单精度和双精度浮点数数据类型

     

    CC++中使用到的单精度浮点数float)类型和双精度浮点数double)类型是在IEEE二进制浮点数算术标准ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存分布、编码规则、取值范围、有效数字位数和测试示例程序六个部分来详细说明。

    存储格式

    浮点数在计算机中存储时,按照二进制科学计数法拆分为三个部分:符号位、指数部分和尾数部分。如下图所示:

    单精度和双精度浮点数数据类型详解 

    存储时,按照最高位存储符号位,次高位存储指数部分,低位存储尾数部分的次序存储。存储时的排列示意图如下:

     单精度和双精度浮点数数据类型详解

     

    内存分布

    float类型和double类型的各部分在内存中的存储空间占用如下表:

     单精度和双精度浮点数数据类型详解

    float类型的内存分布如下图所示:

     单精度和双精度浮点数数据类型详解

    double类型的内存分布如下图所示:

     单精度和双精度浮点数数据类型详解

     

    编码规则

    在实际存储时要对使用二进制科学计数法表示的浮点数值的符号位、指数部分和尾数部分进行编码处理。一般需要分为规约形式的浮点数、非规约形式的浮点数和特殊值三种类型进行编码。其编码前后处理如下图所示:

    单精度和双精度浮点数数据类型详解

    注:非规约浮点数主要用于扩大0值附近的浮点数表示范围,非规约浮点数的绝对值均小于规约浮点数的绝对值,即前者在实数轴上更靠近0,这样可以提高0附近的计算精度;一般CC++floatdouble的取值范围都是按照规约浮点数定义的,MSDN文档和相关教材也是这么说的,但部分编译器按照ANSI/IEEE Std 754-1985标准实现了非规约浮点数,本文末尾留有程序示例说明。

    符号位:0表示正数,1表示负数;

    指数部分: float的偏移量为2^8 - 1double的偏移量为2^11 - 1

    尾数部分:实际尾数部分中的小数点后的数值,规约浮点数使用标准的二进制科学计数法表示,其尾数范围在 [12),非规约浮点数的尾数部分范围在(01)。

    下面以规约浮点数8.5为例,来说明浮点数的编码过程:

    单精度和双精度浮点数数据类型详解

     

    取值范围

    单精度浮点数的各种极限值和取值范围如下图所示:单精度和双精度浮点数数据类型详解

    双精度浮点数的各种极限值和取值范围如下图所示: 单精度和双精度浮点数数据类型详解

     

    有效数字位数

    因为有效数字位数只与位数有关,所以只要计算出十进制表示的尾数中有效数字位数就能知道该浮点数的有效数字位数。

     单精度和双精度浮点数数据类型详解

    注:在接近0、正无穷、负无穷等极限值时,有效数字不能保证为上述精度。

    测试示例程序

    浮点数据表示测试可以通过IEEE-754 Analysis网页在线测试,也可以通过自己编写的C\C++程序来测试。

    一下是在Visual Studio 2010下编写的C++测试代码:

     单精度和双精度浮点数数据类型详解

    输出结果如下:

     单精度和双精度浮点数数据类型详解

    从上述结果可以看出编译器已经实现了ANSI/IEEE Std 754-1985标准中定义的float型和double型浮点数,而头文件定义中并未更新或修改,MSDN文档亦是如此。如下图:

     单精度和双精度浮点数数据类型详解

    展开全文
  • mac版idea注释是command+/ 代码格式化 command+option+L类名要和文件名一模一样,public static void main(String[] args){}是万年不变的固定写法,代表main方法,代表程序执行的起点。标识符:在程序中我们自定义的...
    1. mac版idea注释是command+/ 代码格式化 command+option+L
    2. 类名要和文件名一模一样,public static void main(String[] args){}是万年不变的固定写法,代表main方法,代表程序执行的起点。

    56339853b2be0c1acf4c4edf2b333f12.png
    1. 标识符:在程序中我们自定义的内容,比如类的名字,方法的名字,变量名等等。
    2. 命名规则:
    • 标识符不能以数字开头
    • 标识符不能是关键字
    • 类名规范:首字母大写,大驼峰式
    • 变量和方法规范:首字母小写
    1. 基本数据类型,引用数据类型(后面写,字符串,数组,类,接口,lambda)

    基本数据类型:

    整数型,浮点型,字符型,布尔型

    整数型:byte short int long (默认是int)

    浮点型:float double (默认是double)

    字符型 char

    布尔型 boolean

    1. long类型 赋值要在结尾加L

    float单精度浮点型 赋值要在结尾加F

    double 双精度浮点型

    char类型 1个英文字符是比如'A'占1个字节,也就是8位,8个bit

    一个中文字符 在utf-8编码下是占3个字节

    在gbk编码下是占2个字节

    两个单引号之间有且仅有一个字符,没有不行,空格可以。

    两个单引号之间有且仅有一个字符,大于1个也不行

    7.数据类型转换

    隐式转换:数据范围小的转化为数据范围大的

    显示转换:数据范围大的转化为数据范围小的

    展开全文
  • 其选用的精度格式是:双精度格式(64 位的二进制数)这篇就稍稍深入了解下双精度浮点数,以及有关于数 Number 的问题。IEEE 754 标准IEEE 二进制浮点数算术标准(IEEE 754),是最广泛使用的浮点数运...
    6cf2ea88329d7771bf30a3d3dc22c438.png

    前言

    我们都遇到过如下计算结果:

    f69843542ab7e4bb689d8cf4bf436831.png

    为什么会出现如此结果?难道不为 0.3 吗?这涉及到 js 的精度问题。

    首先 js 的数字类型采用基于 IEEE 754 标准来实现的(也称为浮点数)。其选用的精度格式是:双精度格式(64 位的二进制数)

    这篇就稍稍深入了解下双精度浮点数,以及有关于数 Number 的问题。

    IEEE 754 标准

    IEEE 二进制浮点数算术标准(IEEE 754),是最广泛使用的浮点数运算标准,为许多 CPU 与浮点运算器所采用。

    这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值((无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

    规定了四种表示浮点数值的方式:单精确度(32 位)、双精确度(64 位)、延伸单精确度(43 比特以上,很少使用)与延伸双精确度(79 比特以上,通常以 80 位实现)

    64 位的双精度

    下图,基本解释清楚 64 位数的组成部分:

    c723892e6be3a1dfb972b94aac932dfb.png

    64位的双精度

    64位的双精度(维基百科)

    • sign bit(S 符号):符号位,表示正负号(0 为负数,1 为正数)
    • exponent(E 指数):表示次方数,在(二进制的)科学计数法中定义 2 的多少次幂
    • mantissa(M 尾数):表示精确度(小数部分,规范中会省略个位数上的 1 )

    那么一个双精度值的表达式如下:

    5b2b2ad7c139d9ab0e1aa1fdd94277f1.png

    我知道会有很多地方看不懂,没事,我下面来具体解释一下。

    符号位 sign

    符号位很容易理解,表示整个数的正负值。

    9b17757756d57136742d266a2b7cf482.png

    所以用此位来示意数的正负性。

    尾数位 mantissa

    尾数也被称为规约形式的浮点数,因为在科学计数法的显示下,分数(fraction 也是 mantissa 那个部分之一)部分最高有效为是 1 (个位数)

    8107b88caa0a0000ad43dcd1c507d045.png

    最终 mantissa 会以 000001 来示意,会被规范成 1.M 格式 ,其中 1 会被隐藏掉,所以最大是表达 53 位的数(如上图,实际 mantissa 只有 52 位)。

    指数位 exponent

    科学计数法

    我知道各位都是受过义务教育的,不过我真的忘记了,简单回顾下把:

    科学记数法是一种记数的方法。把一个数表示成 a 与 10 的 n 次幂相乘的形式(1≤|a|<10,n 为整数),这种记数法叫做科学记数法。

    eee6a249f56967207d06ed1d1e960c91.png

    那和科学计数法有什么关系,应该注意到 指数位是 2 的 n 次幂 (为何不是 10 ,因为是二进制)。

    如果我们要表达 100(2),则结果如下:

    61b69928c99cb9fa920f950dd7a75022.png

    指数偏移值(exponent bias)

    我们了解科学计数法是可以表示大于 1 ,或者小于 1 的数(小数),即:通过正负指数的值来标识显示。

    由于指数位的 11 位不包括符号位,那么为了达到这样正负的效果,就引入了 指数的偏移值

    为什么要引入这个概念?我想了很久,以下这个例子或许会给你启发:

    指数如果是 1023 和 1024,到底哪个值谁大?

    首先 11 位的指数位对应的二进制最大和最小结果值为:00000000000(0) ,11111111111(2047,2^(12-1)-1),即指数的取值范围为:[0,2047]

    并且我们知道指数具有 正负值 (来控制小数点左右移位),那么我们按照二进制中负数的规则(取反,补位),那么指数值为 [0,1023] 区间内为正数,[1024,2047] 内为负数(二进制中负数最高位为 1 )。

    2ec3e4e4e90cadb0cd0fce3ba45a2a5d.png

    另外,根据 IEEE 规范, 0 和 2047 两个最值需要做特殊用途,所以这里移除,所以整个规范的指数取值范围是: [1,2046]

    回到这个问题,1023 和 1024 到底谁大,按照上面区间的划分,明显是 1023 > 1024 (正数大于负数,但机器不那么想)。

    崩溃!就我个人理解起来就很困难,更不谈实际运算了(当你看到一个大于 1023 的值,还需要引入符号位,补码之类的计算方式)。

    所以引入偏移值 bias(bias = 1023),使得整个运算简单,好理解。

    那么 [-1022+bias,1023+bias] 等同于 [1,2046],这样抛去了符号位的影响, 最终:1023 就变成了 0 ,1024 变成了 1 ,明显 1 的指数值更大。

    至于为何是 1023 ,我给的建议是 2046/2 (虽然这样理解是不对的,我认为数学功底真的对编程用处很大,虽然全还给老师了),另外 32 位精度浮点数的指数偏移量是 127 。


    标准(规格)和非标准(规格)

    整个指数位的值分为三种情况:

    8d0f6ea462f905c7a307f8c1e66ddbf6.png

    解惑些问题

    整数范围

    当尾数为标准模式时:1.M ,尾数位供 52 位,加上隐藏位 1 ,整个精度会是 53 位。

    那么整数的取值范围是 [-2^53-1,2^53-1]

    a611c7c84b9ad42a9d682f8d0a6bb9a3.png

    最小精度

    在尾数的 52 位中,使得有一个最小的位定义(1.00000~ 中间 51 个 0~00001),即 2^-52 。

    06293ea44a5987d1d9585bf34bc03319.png

    0.1+0.2 等于什么?

    按照最小精度,即打满 52 位,那么像 0.1 和 0.2 最终无限循环后的:

    0451e8f5fd320df9d463181d2371c7d2.png

    最后

    对于这个 IEEE 754 规范,我理解的还不是很透彻,不过对于 js 精度上的问题也算是有个初步的解答。

    如果有不对之处望各位留言指正。

    展开全文
  • 满意答案骑驴客才尽2014.11.11采纳率:44%等级:7已帮助:311人float为单精度,有效数字为6~7double为双精度,有效数字为15~16但他们在输出时,小数点后都有6位小数。例如3.123456但是在格式化输出时例外。如:main...
  • PHP中的浮点精度和类型 原文:PHP中的浮点精度和类型PHP中的浮点数 浮点数精度 ...在PHP中,浮点数的字长...尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11...
  • 其选用的精度格式是:双精度格式(64 位的二进制数)这篇就稍稍深入了解下双精度浮点数,以及有关于数 Number 的问题。IEEE 754 标准IEEE 二进制浮点数算术标准(IEEE 754),是最广泛使用的浮点数运...
  • 在现代 JavaScript 中,数字(number)有两种类型:JavaScript 中的常规数字以 64 位的格式 IEEE-754 存储,也被称为“双精度浮点数”。这是我们大多数时候所使用的数字,我们将在本章中学习它们。BigInt 数字,用于...
  • 数据类型最新的 ECMAScript 标准定义了 8 种数据类型:Number 数字类型根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(2^53 -1) 到 (2^53 -1)。...
  • 当在int(假设int是32位的)、float和double格式之间进行强制类型转换时,原则如下:从 int 转换成 float,数字不会溢出,但是可能被舍入。从 int、float 转换成 double,能够保留精确的数值。因为 double 有更大的...
  • C中printf的输出格式类型和%g的用法

    万次阅读 2016-04-20 10:33:42
    %g是C语言printf()函数的一个输出格式类型,它表示以%f%e中较短的输出宽度输出单、双精度实数,在指数小于-4或者大于等于精度时使用%e格式  printf()输出格式类型说明:  输出类型 格式字符意义  a 浮点数、...
  • C语言其实功能很强大,有不少细节的功能很有用。今天分享下C语言输入函数scanf函数中 %[] 格式控制...常见的格式控制有:%d 整数%f 单精度浮点数%lf 双精度浮点数%c 字符%p 指针值%s 字符串%u 无符号整数%% 百分号...
  • 大类 类型 ...FLOAT – 单精度浮点数DOUBLE – 双精度浮点数 Fixed point numbers(定点数) DECIMAL–17字节,任意精度数字,用户自定义精度定点数,如DECIMAL(10,3) String types(字符串) STRIN...
  • %lf:浮点数(双精度)double %.5lf:显示保留小数点后5位 %s:字符串 %c:单个字符 %p:指针的值(地址) %e:指数形式的浮点数 %x:以十六进制表示的整数(0x开头的数表示为十六进制,如0x234) %0:以八进制表示...
  • QML基础类型之double

    2020-11-27 16:33:53
    带小数点的数字,以双精度存储。 双精度类型是指带小数点的数字,并以双精度IEEE浮点格式存储。 Item { property double number: 123.456 }
  • php浮点精度问题

    2019-12-26 11:04:18
    PHP中的浮点精度和类型 ...尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差...
  • JSON格式支持以下数据类型 -编号类型和说明1数JavaScript中的双精度浮点格式2string双引号Unicode,反斜杠转义3boolean对或错4数组一个有序序列的值5value它可以是字符string,数字,真或假,空等6目的密钥:值对的...
  • JSON数据类型

    千次阅读 2018-06-04 17:17:29
    JSON格式支持的数据类型有以下:类型描述Number在JavaScript中的双精度浮点格式String双引号的反斜杠转义的UnicodeBooleantrue 或 falseArray值的有序序列Value它可以是一个字符串,一个数字,真的还是假(true/...
  • ③JS中Number类型使用binary64或双精度表示的,实质是一个二进制格式64位的浮点数 ④64位的二进制具体为最高的1位是符号位,接着的11位是指数,剩下的52位为有效数字 ⑤符号位决定了一个数的正负,指数部分决定了...
  • matlab 单双精度引发的血案

    千次阅读 2016-04-05 16:02:20
    今天在测试一个算法时遇到了少见的问题,觉得值得记录,总结起来,可以用下面...matlab在用双精度减(或加)单精度类型时,返回的结果竟然存储格式是单精度的,而单精度的实际有效位数为24位,也就是能够表示的范围最大
  • 数据类型

    2015-09-16 14:32:56
    1.数据类型 (1)整型:short(短整型),int(整型),long(长整型) (2)浮点型:float(单精度浮点型),double(...而双精度浮点型,小数点后十五位为有效数字; 在定义多个相同类型变量时,可以使用逗号隔开,例如:int
  • ③JS中Number类型使用binary64或双精度表示的,实质是一个二进制格式64位的浮点数 ④64位的二进制具体为最高的1位是符号位,接着的11位是指数,剩下的52位为有效数字 ⑤符号位决定了一个数的正负,指数部分决定了...
  • Javascript 数据类型(Symbol数据类型的介绍) Javascript中,数据类型有 2 种,一类是基本...number类型数字类型,这种类型使用 IEEE754 格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。
  • json 数据类型简介

    2019-11-20 15:19:14
    JavaScript 中的双精度浮点型格式 字符串型(String) 双引号包裹的 Unicode 字符和反斜杠转义字符 布尔型(Boolean) true 或 false 数组(Array) 有序的值序列 值(Value) 可以是字符串...
  • JSON 数据类型、对象

    2019-06-02 14:54:40
    JavaScript 中的双精度浮点型格式 字符串型(String) 双引号包裹的 Unicode 字符和反斜杠转义字符 布尔型(Boolean) true 或 false 数组(Array) 有序的值序列 值(Value) 可以是字符串...
  • printf格式控制(转)

    2017-02-15 14:08:47
    它表示以%f%e中较短的输出宽度输出单、双精度实数,在指数小于-4或者大于等于精度时使用%e格式 printf()输出格式类型说明: 输出类型 格式字符意义 a 浮点数、十六进制数字和p-计数法(C99) A 浮点数、十六进制...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 172
精华内容 68
关键字:

双精度类型格式数字