当前位置:文档之家› 单精度与双精度区别

单精度与双精度区别

单精度与双精度区别
单精度与双精度区别

单精度和双精度的区别

单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念:当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。

基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值 5.1,很可能存储在单精度/双精度数值中的实际值是 5.100000000001或者5.09999999999999。导致这个现象的原因我们可以通过两种方式来解释:

简单的解释方法:

你可以尝试在任何一个控件的属性面板中,设定他的宽度为:3.2CM,当你输入完毕后,你会发现值自动变成了3.199cm,无论你怎么改,你都无法输入3.200CM,因为实际上在电脑中存储的并不是CM为单位的数值,而是“缇”为单位的数值,而“缇”和CM之间的比值,是个很难被除尽的数,因此你输入完毕后,电脑自动转换成了最接近的“缇”值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了。单精度/双精度也是类似的原理,其实在二进制存储的时候,单精度/双精度都采用了类似相近分数的方法,而这样的存储是不可能做到准确的。

深入的解释方法:

让我们来看看我们存储到数字介质中的单精度/双精度值到底是怎么样的,我们使用如下代码对单精度类型进行一个解剖:

Public Declare Sub CopyMemory Lib "kernel32" Alias

"RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Sub floatTest() Dim dblVar As Single

dblVar = 5.731 / 8 dblOutput dblVar

dblVar = dblVar * 2 dblOutput dblVar

dblVar = dblVar * 2 dblOutput dblVar

dblVar = dblVar * 2 dblOutput dblVar

dblVar = dblVar * 2 dblOutput dblVar

dblVar = dblVar * 2 dblOutput dblVar

End Sub

Public Sub dblOutput(ByVal dblVar As Single) Dim bytVar(3) As Byte

Dim i As Integer, j As Integer Dim strVar As String

CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4 strVar = dblVar & ": " For i = 3 To 0 Step -1 For j = 7 To 0 Step -1

strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j

Next j

strVar = strVar & " " Next i

Debug.Print strVar

End Sub

运行后我们得到输出结果(输出格式为高位左,低位右):

.716375: 00111111 00110111 01100100 01011010 1.43275: 00111111 10110111 01100100 0 1011010 2.8655: 01000000 00110111 01100100 01011010 5.731: 01000000 10110111 01100100 01011010 11.462: 01000001 00110111 01100100 01011010 22.924: 01000001 10110111 01100 100 01011010

这里,我们把单精度类型转化成了二进制数据输出,这里我们看到,虽然这六个数字完全不同,但是他们的二进制存储惊人地相似,我们看到红色标记部分,每次都是加1,事实上,单精度数据类型使用从高位开始第1位作为正负标记位(绿色),第2位到第9位,是一个跨字节的有符号字节类型数据,这个数值决定了小数点移动的方向和位数(红色),第10位到32位保存一个整数(蓝色)在存储过程中,电脑首先把输入的值不断移位(乘除2)直到这个数的整数部分占用了全部24位的整数位,然后把移动的位数写入浮点部分(红色),而移位后的结果写入整数部分(蓝色和绿色),小数部分则舍弃。求值的时候则是反向过程,先根据正负位和整数位求值,然后根据红色部分的整数来进行移位(乘除2的次方),最终才是我们得到的单精度数值。双精度数值也是同样原理,只是位数更多而已。

通过解剖单精度数值的二进制存储格式,我们可以清楚看到,实际上单精度/双精度的存储,都要通过乘法和除法,其中必有舍入,如果恰好你的数值在除法中被舍入了,那么你赋的初值就很可能与你最终存储的值不完全相同,其中的微小差异,并不与单精度/双精度的设计目标相违背。

当我们在数据库中或者VBA代码中使用一个单精度/双精度数值的时候,也许你从界面上看不到区别,但是在实际的存储中,这个差别却真真切切地就在那里,当你对其进行相等比较的时候,系统只是简单地作二进制的比较,界面上无法体现的微小差异,在二进制比较面前却无处遁形,于是,你的等于比较返回了一个意料之外的False。

浮点数和定点数的区别

cloudseawang 定点数与浮点数区别 最近做HDR时,经常要用NV提供的16位纹理,它的说明书16位能达到24位的精度,就很奇怪?一直搞不懂浮点数的精度怎么算的? 今天认真看了一下IEEE float point的标准,终于明白是什么了 1. 什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数(Fixed Point Number)。在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式,比如99.00 或者00.99 可以用于表达具有四位精度(Precision),小数点后有两位的货币值。由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。SQL 中的NUMBER 数据类型就是利用定点数来定义的。还有一种提议的表达方式为有理数表达方式,即用两个整数的比值来表达实数。 定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如123.45 用十进制科学计数法可以表达为1.2345 × 102 ,其中1.2345 为尾数,10 为基数,2 为指数。浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。 提示: 尾数有时也称为有效数字(Significand)。尾数实际上是有效数字的非正式说法。同样的数值可以有多种浮点数表达方式,比如上面例子中的123.45 可以表达为12.345 ×101,0.12345 × 103 或者1.2345 × 102。因为这种多样性,有必要对其加以规范化以达到统一表达的目标。规范的(Normalized)浮点数表达方式具有如下形式: ±d.dd...d × β e , (0 ≤ d i < β) 其中 d.dd...d 即尾数,β 为基数,e 为指数。尾数中数字的个数称为精度,在本文中用p 来表示。每个数字d 介于0 和基数之间,包括0。小数点左侧的数字不为0。 基于规范表达的浮点数对应的具体值可由下面的表达式计算而得: ±(d 0 + d 1β-1 + ... + d p-1β-(p-1))β e , (0 ≤ d i < β) 对于十进制的浮点数,即基数β 等于10 的浮点数而言,上面的表达式非常容易理解,也很直白。计算机内部的数值表达是基于二进制的。从上面的表达式,我们可以知道,二进制数同样可以有小数点,也同样具有类似于十进制的表达方式。只是此时β 等于2,而每个数字d 只能在0 和 1 之间取值。比如二进制数1001.101 相当于1 × 2 3 + 0 × 22 + 0 ×21 + 1 ×20 + 1 ×2-1 + 0 ×2-2 + 1 ×2-3,对应于十进制的9.625。其规范浮点数表达为1.001101 × 23。 2. IEEE 浮点数 计算机中是用有限的连续字节保存浮点数的。保存这些浮点数当然必须有特定的格式,Java 平台上的浮点数类型float 和double 采纳了IEEE 754 标准中所定义的单精度32 位浮点数和双精度64 位浮点数的格式。 注意: Java 平台还支持该标准定义的两种扩展格式,即float-extended-exponent 和double-extended-exponent 扩展格式。这里将不作介绍,有兴趣的读者可以参考相应的参考资料。 在IEEE 标准中,浮点数是将特定长度的连续字节的所有二进制位分割为特定宽度的符号域,指数域和尾数域三个域,其中保存的值分别用于表示给定二进制浮点数中的符号,

plc编程中的字节 字 双字 整数 双整数 实数 之间的关系

字word 字节byte 位bit 整数分:1、int 带符号16位整数 2、dint 带符号32位整数双整数 real 浮点数实数32位 继续追问:它们之间有什么关系吗 补充回答:(1000位)1kb=1024字节,1字=2字节,1双字=2字=4字节,1字节=8位 整数有符号型与无符号型。 整数分 32位平台: short 在内存中占两个字节,范围为-2^15~(2^15-1) int 在内存中占四个字节,范围为-2^31~(2^31-1) long在内存中占四个字节,范围为-2^31~2^31-1 无符号型:最高位不表示符号位 unsigned short 在内存中占两个字节,范围为0~2^16-1 unsigned int 在内存中占四个字节,范围为0~2^32-1 unsigned long在内存中占四个字节,范围为0~2^32-1 实型变量: 分单精度float 和双精度double 两种形式: float:占四个字节,提供7~8位有效数字。 double: 占八个字节,提供15~16位有效数字。 (二)16位平台: 1)整型(基本型):类型说明符为int,在内存中占2个字节。 2)短整型:类型说明符为short int或short。所占字节和取值范围均与整型(基本型)相同。 3)长整型:类型说明符为long int或long,在内存中占4个字节。 无符号型:类型说明符为unsigned。 无符号型又可与上述三种类型匹配而构成: 各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。 实型变量: 分为单精度(float型)、双精度(double型)和长双精度(long double型)三类。 单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。 双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。 长双精度型16 个字节(128位)内存空间,可提供18-19位有效数字。

单精度与双精度区别

单精度和双精度的区别 单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念:当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。 基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值 5.1,很可能存储在单精度/双精度数值中的实际值是 5.100000000001或者5.09999999999999。导致这个现象的原因我们可以通过两种方式来解释: 简单的解释方法: 你可以尝试在任何一个控件的属性面板中,设定他的宽度为:3.2CM,当你输入完毕后,你会发现值自动变成了3.199cm,无论你怎么改,你都无法输入3.200CM,因为实际上在电脑中存储的并不是CM为单位的数值,而是“缇”为单位的数值,而“缇”和CM之间的比值,是个很难被除尽的数,因此你输入完毕后,电脑自动转换成了最接近的“缇”值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了。单精度/双精度也是类似的原理,其实在二进制存储的时候,单精度/双精度都采用了类似相近分数的方法,而这样的存储是不可能做到准确的。 深入的解释方法: 让我们来看看我们存储到数字介质中的单精度/双精度值到底是怎么样的,我们使用如下代码对单精度类型进行一个解剖: Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Sub floatTest() Dim dblVar As Single dblVar = 5.731 / 8 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar End Sub Public Sub dblOutput(ByVal dblVar As Single) Dim bytVar(3) As Byte Dim i As Integer, j As Integer Dim strVar As String

c语言单精度和双精度的区别

c语言单精度和双精度的区别 c语言单精度和双精度的区别单精度是这样的格式,1位符号,8位指数,23位小数。 双精度是1位符号,11位指数,52位小数。 区别就是它所能存储的数值范围大小不同, 双精度变量能存储比单精度变量更大或更小的值。 -- -- float 能赋值+/- 3.40282e+038 -- -- double能赋值+/- 1.79769e+308 含义:表明单精度和双精度精确的范围不一样,单精度,也即float,一般在计算机中存储占用4字节,也32位,有效位数为7位;双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。 原因:不管float还是double 在计算机上的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位,指数位和尾数部分。其中float的符号位,指数位,尾数部分分别为1,8,23. 双精度分别为1,11,52。 精度主要取决于尾数部分的位数,float为23位,除去全部为0的情况以外,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位。类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。 单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念: 当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出

基本数据类型与数值表达式

基本数据类型与数值表达式 一、知识要点 计算机的基本功能是进行数据处理。在C++语言中,数据处理的基本对象是常量和变量。运算是对各种形式的数据进行处理。数据在内存中存放的情况由数据类型所决定。数据的操作要通过运算符实现,而数据和运算符共同组成了表达式。本章是对C++语言中的数据类型、运算符、表达式等内容的全面介绍,要正确理解其特点,并灵活运用,主要掌握以下的知识要点: 1.掌握常量和变量的概念。 2.掌握整型数据和实型数据、字符型数据和字符串型数据的概念和区别。 3.掌握各种类型的变量说明及其初始化。 4.掌握算术运算、关系运算、逻辑运算、赋值运算、逗号运算、条件运算等概念。 5.掌握运算符的优先级、左结合和右结合规则。 6.掌握表达式求值时的自动转换和强制类型转换。 7.掌握自加、自减运算的规则。 8.掌握常用数学函数的功能。 二、例题分析与解答 1.选择题 例题1:运算符+、=、*、>=中,优先级最高的运算符是()。 A.+ B.= C.* D.>= 答案:C 分析:根据C++语言对运算符优先级的规则,以上运算符优先级从低到高的次序为=、>=、+、*。 例题2:下列说法正确的是()。 A.cout<<”\n”是一个语句,它能在屏幕上显示”\n” B.\68代表的是字符D。

C.1E+5的写法正确,它表示余割整型常量。 D.0x10相当于020。 答案:D 分析:分号是语句的已部分,且\n是转义字符;\68代表了八进制的6、8,而八进制中没有数字8;1E+5是实型常量;十六进制的10相当于十进制的16,相当于八进制的20。 例题3:下列不合法的变量名为()。 A.int B.int1 C.name_1 D.name0 答案:A 分析:根据变量名命名要求,变量名只能由大小写字母、数字、下划线组成,且系统关键字不能作为变量名。 例题4:下面正确的为()。 A.4.1/2 B.3.2%3 C.3/2==1 结果为1 D.7/2 结果为3.5 答案:A 分析:%运算符要求式整型;关系运算值为0;两个整数相除,商为为相除后的整数部分。 例题5:已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)?++d:a

计算机组成原理选择题及答案

1. 冯·诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU区分它们的依据是() A. 指令操作码的译码结果 B. 指令和数据的寻址方式 C. 指令周期的不同阶段 D. 指令和数据所在的存储单元 答案为:C 2. 假定变量i,f,d数据类型分别为int, float, double(int用补码表示,float和double用IEEE754单精度和双精度浮点数据格式表示),已知i=785,f=1.5678e3 ,d=1.5e100,若在32位机器中执行下列关系表达式,则结果为真的是() (I) i==(int)(float)i (II)f==(float)(int)f (III)f==(float)(double)f (IV)(d+f)-d==f A. 仅I和II B. 仅I和III C. 仅II和III D. 仅III和IV 答案B 3.一个C语言程序在一台32位机器上运行。程序中定义了三个变量x,y和z,其中x和z 是int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y 后,x、y和z的值分别是: A x=0000007FH , y=FFF9H , z=00000076H B x=0000007FH , y=FFF9H , z=FFFF0076H C x=0000007FH , y=FFF7H , z=FFFF0076H D x=0000007FH , y=FFF7H , z=00000076H 答案D 4. 某计算机主存容量为64KB,其中ROM区为4KB,其余为RAM区,按字节编址,现要用2K×8位的ROM芯片和4K×4位的RAM芯片来设计该存储 器,则需要上述规格的ROM芯片数和RAM芯片数分别是() A . 1、15 B . 2、15 C . 1、30 D . 2、30 答案D 5. 假定用若干个2K×4位芯片组成一个8K×8位的存储器,则地址0B1FH所在芯片的最小地址是() A. 0000H B. 0600H C. 0700H D. 0800H 答案D

float与double的范围和精度

float与double的范围和精度 1 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: 在数学中,特别是在计算机相关的数字(浮点数)问题的表述中,有一个基本表达法: value of floating-point= significand x base^ exponent , with sign F.1 译为中文表达即为: (浮点)数值 = 尾数×底数^指数,(附加正负号)-------- F.2于是,float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。 float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double 的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。 2 精度 float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。 float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字; double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。 单精度类型(float)和双精度类型(double)存储 C 语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双 精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是 R64.53。 无论是单精度还是双精度在存储中都分为三个部分: 1.符号位(Sign) : 0代表正,1代表为负 2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位 存储

谨慎使用单精度双精度数值类型

谨慎使用单精度/双精度数值类型 单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念: 当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。 基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值5.1,很可能存储在单精度/双精度数值中的实际值是5.100000000001或者5.09999999999999。导致这个现象的原因我们可以通过两种方式来解释:

简单的解释方法: 你可以尝试在任何一个控件的属性面板中,设定他的宽度为:3.2CM,当你输入完毕后,你会发现值自动变成了3.199cm,无论你怎么改,你都无法输入3.200CM,因为实际上在电脑中存储的并不是CM为单位的数值,而是"缇"为单位的数值,而"缇"和CM之间的比值,是个很难被除尽的数,因此你输入完毕后,电脑自动转换成了最接近的"缇"值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了。单精度/双精度也是类似的原理,其实在二进制存储的时候,单精度/双精度都采用了类似相近分数的方法,而这样的存储是不可能做到准确的。 深入的解释方法: 让我们来看看我们存储到数字介质中的单精度/双精度值到底是怎么样的,我们使用如下代码对单精度类型进行一个解剖:Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Sub floatTest() Dim dblVar As Single dblVar = 5.731 / 8 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar

fluent中文攻略笔记(仅要2分)

fluent中文攻略笔记 单精度和双精度求解器 在所有的操作系统上都可以进行单精度和双精度计算。对于大多数情况来说,单精度计算已经足够,但在下面这些情况下需要使用双精度计算: (1)计算域非常狭长(比如细长的管道),用单精度表示节点坐标可能不够精确,这时需要采用双精度求解器。 (2)如果计算域是许多由细长管道连接起来的容器,各个容器内的压强各不相同。如果某个容器的压强特别高的话,那么在采用同一个参考压强时,用单精度表示其他容器内压强可能产生较大的误差,这时可以考虑使用双精度求解器。 (3)在涉及到两个区域之间存在很大的热交换,或者网格的长细比很大时,用单精度可能无法正确传递边界信息,并导致计算无法收敛,或精度达不到要求,这时也可以考虑采用双精度求解器。 网格文件是包含各个网格点坐标值和网格连接信息2,以及各分块网格的类型和节点数量等信息的文件 进程文件(journal file)是一个FLUENT 的命令集合,其内容用Scheme 语言写成。可以通过两个途径创建进程文件:一个是在用户进入图形用户界面后,系统自动记录用户的操作和命令输入,自动生成进程文件;另一个是用户使用文本编辑器直接用Scheme 语言创建进程文件,其工作过程与用FORTRAN 语言编程类似。 File -> Write -> Start Journal 系统就开始记录进程文件。此时原来的Start Journa(l 开始进程)菜单项变为Stop Jour nal(终止进程),点击Stop Journal(终止进程)菜单项则记录过程停止。 边界函数分布文件(profile file)用于定义计算边界上的流场条件 ,还可以将边界网格写入单独的文件,相应的菜单操作是: File -> Write -> Boundary Grid 在打开的文件选择窗口中保存文件即可。在用户对网格不满意时,可以先将边界网格保存起来,然后再用Tgrid 软件读入这个网格文件,并重新生成满意的立体网格。 FLUENT 目前可以兼容的导出格式包括ABAQUS、ANSYS、ASCII、AVS、CGNS、Dat a Explorer、EnSight (过去称为MPGS )、FAST、Fieldview、I-DEAS、NASTRAN、P ATRAN、RadTherm 和Tecplot 格式。 需要注意的是,FLUENT 不支持表面(surface)数据。如果导出的文件中带有指定的表面,那么这样的文件将不能重新导入FLUENT。不过FLUENT 的网格生成软件TGrid 支持表面数据。另外,I-DEAS 软件不支持金字塔型的网格划分方式,所以如果网格中带有

浮点数(单精度浮点数与双精度浮点数)在计算机中的存储

浮点数在计算机中的存储 十进制浮点数格式: 浮点数格式使用科学计数法表示实数。科学计数法把数字表示为系数(coefficient)(也称为尾数(mantissa)),和指数(exponent)两部分。比如3.684*10^2. 在十进制中,指数的基 数为10,并且表示小数点移动多少位以生成系数。每次小数点向前移动时,指数就递增;每次小数点向后移动时,指数就递减。例如,25.92 可表示为2.592 * 10^1,其中2.592 是系数,值10^1 是指数。必须把系数和指数相乘,才能得到原始的实数。另外,如0.00172 可表示为1.72*10^-3,数字1.72 必须和10^-3 相乘才能获得原始值。 二进制浮点格式: 计算机系统使用二进制浮点数,这种格式使用二进制科学计数法的格式表示数值。数字按照二进制格式表示,那么系数和指数都是基于二进制的,而不是十进制,例如 1.0101*2^2. 在十进制里,像0.159 这样的值,表示的是0 + (1/10) + (5/100) + (9/1000)。相同的原则也适用二进制。比如,1.0101 乘以2^2 后,生成二进制值101.01 ,这个值表示二进制整数5,加上分数(0/2) + (1/4) 。这生成十进制值5.25 。下表列出几个二进制 小数以及它们对应的十进制值: 二进制十进制分数十进制值 0.1 1/2 0.5 0.01 1/4 0.25 0.001 1/8 0.125 0.0001 1/16 0.0625 0.00001 1/32 0.03125 0.000001 1/64 0.015625 几个二进制浮点例子:二进制十进制分数十进制值 10.101 2+1/2+1/8 2.625 10011.001 19+1/8 19.125 10110.1101 22+1/2+1/4+1/16 22.8125 1101.011 13+1/4+1/8 13.375 编写二进制浮点值时,二进制通常被规格化了。这个操作把小数点移动到最左侧的数位,并且修改指针进行补偿。例如1101.011 变成1.101011*2^3 浮点数的存储 ?IEEE 标准754 浮点数标准使用3 个成分把实数定义为二进制浮点值: ?符号 ?有效数字

相关主题
文本预览
相关文档 最新文档