C#中float的取值范围和精度分析

本文实例分析了C#中float的取值范围和精度。分享给大家供大家参考。具体分析如下:

float类型的表现形式:

默认情况下,赋值运算符右侧的实数被视为 double。 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示:

float x = 3.5F;
如果在以上声明中不使用后缀,则会因为您尝试将一个 double值存储到 float 变量中而发生编译错误。

float的取值范围

float占用4个字节,和int是一样,也就是32bit.

1bit(符号位) 8bits(指数位) 23bits(尾数位)

存储方式如下图:

取值范围基本表达法

(浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号)----------------

于是,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。

其他特殊表示

1.当指数部分和小数部分全为0时,表示0值,有+0和-0之分(符号位决定),0x00000000表示正0,0x80000000表示负0. 2.指数部分全1,小数部分全0时,表示无穷大,有正无穷和负无穷,0x7f800000表示正无穷,0xff800000表示负无穷. 3.指数部分全1,小数部分不全0时,表示NaN,分为QNaN和SNaN,Java中都是NaN.

结论: 可以看出浮点数的取值范围是:2^(-149)~~(2-2^(-23))*2^127,也就是Float.MIN_VALUE和Float.MAX_VALUE.

精度

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

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • c#求两个数中最大值的方法

    1.三元运算符: 复制代码 代码如下: class Program    {        static void Main(string[] args)        {          int max= NumMAX(10,15);            Console.WriteLine("最大数:{0}",max);            Console.ReadKey();        }   /// <summary>        /// 两个数中最大的值

  • C#函数式编程中的惰性求值详解

    惰性求值 在开始介绍今天要讲的知识之前,我们想要理解严格求值策略和非严格求值策略之间的区别,这样我们才能够深有体会的明白为什么需要利用这个技术.首先需要说明的是C#语言小部分采用了非严格求值策略,大部分还是严格求值策略.首先我们先演示非严格求值策略的情况,我们先在控制台项目中写一个DoOneThing方法. 然后在Main方法中写入下面这串代码: 然后我们运行程序,会发现DoOneThing方法并没有执行.当然这看起来也很正常,因为这是或,并且第一个已经是true了.整个表达式就是true了,自

  • C#窗体传值实例汇总

    本文实例汇总了C#窗体传值的方法.分享给大家供大家参考.具体方法如下: 1.静态变量传值,非常简单适合简单的非实例的 复制代码 代码如下: public calss form1:Form{     public static int A; } public class form2:Form{    form1.A=1; } 2.委托传值 复制代码 代码如下: public class form1:Form{   public int A{get;set;}   public static Act

  • c#获取数组中最大数的值

    求数组中最大的数的值:1.数组的max函数: 复制代码 代码如下: class Program    {        static void Main(string[] args)        {            int[] array = {1,3,5,2,4,6,7,9,0,8};           int max= GetMax(array);            Console.WriteLine("数组中最大的值是{0}",max);            Co

  • C#将hashtable值转换到数组中的方法

    本文实例讲述了C#将hashtable值转换到数组中的方法.分享给大家供大家参考.具体如下: 此代码可以将hashtable中的值通过copyto转换到一个一维数组 var length = ht.Count; Guest[] array = new Guest[length]; ht.Values.CopyTo(array, 0); 其中ht为hashtable,其key为字符串,value为一个Guest类,通过此代码可以讲values的值全部放入 Guest[] 的数组中 希望本文所述对大

  • C#获取两个数的最大公约数和最小公倍数示例

    最大公约数:指两个或多个整数共有约束中最大的一个. 最小公倍数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个. 复制代码 代码如下: /// <summary>/// 最大公约数/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// &

  • C#求n个数中最大值和最小值的方法

    本文实例讲述了C#求n个数中最大值和最小值的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine("输入十个数: "); /

  • C#图像处理之图像均值方差计算的方法

    本文实例讲述了C#图像处理之图像均值方差计算的方法.分享给大家供大家参考.具体如下: //本函数均是基于RGB颜色空间计算 //定义图像均值函数(RGB空间) public double AnBitmap(Bitmap a) { double V = 0; Rectangle rect = new Rectangle(0, 0, a.Width, a.Height); System.Drawing.Imaging.BitmapData bmpData = a.LockBits(rect, Sys

  • C#中float的取值范围和精度分析

    本文实例分析了C#中float的取值范围和精度.分享给大家供大家参考.具体分析如下: float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double. 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示: float x = 3.5F; 如果在以上声明中不使用后缀,则会因为您尝试将一个 double值存储到 float 变量中而发生编译错误. float的取值范围 float占用4个字节,和int是一样,也就是32bit. 1bit(符号位) 8bits(指数位)

  • JSP 中使用cache取值出错解决办法

     JSP  中使用cache取值出错解决办法 这段时间发现系统取数据过程中,偶尔出现取数据错乱的问题,按逻辑应该取出A数据,结果取出了B数据.仔细检查了代码, 发现代码逻辑没有问题,瞬间就蒙了,是哪里出现问题了呢.仔细想了一下,以前都没出现问题,自从加了缓存之后就偶尔出现了问题,那肯定问题是缓存有问题. 仔细研究了缓存的源码,原来问题出现在DefaultKeyGenerator生成key上面.代码如下: public class DefaultKeyGenerator implements Ke

  • vue遍历对象中的数组取值示例

    前几天小项目,没考虑周全,让后端改接口,改成数组中包含对象中包含数组的形式,后来越琢磨越不对,后台把所有数据放在了一个对象里,我拿弹窗数据不好拿,索性又改了回来,把后端折腾够呛,自己也折腾够呛,发上来,以示警戒 改前拿数据 <div class='your-container'> <div class="sortText"> <div>综合排序</div> <div class="sortHot" @click=

  • JSP  中使用cache取值出错解决办法

     JSP  中使用cache取值出错解决办法 这段时间发现系统取数据过程中,偶尔出现取数据错乱的问题,按逻辑应该取出A数据,结果取出了B数据.仔细检查了代码, 发现代码逻辑没有问题,瞬间就蒙了,是哪里出现问题了呢.仔细想了一下,以前都没出现问题,自从加了缓存之后就偶尔出现了问题,那肯定问题是缓存有问题. 仔细研究了缓存的源码,原来问题出现在DefaultKeyGenerator生成key上面.代码如下: public class DefaultKeyGenerator implements Ke

  • mysql中TINYINT的取值范围

    在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127.无符号的范围是0到255(见官方<MySQL 5.1参考手册>http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types). Tinyint占用1字节的存储空间,即8位(bit).那么Tinyint的取值范围怎么来的呢?我们先看无符号的情况.无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint

  • springBoot项目中使用@Value取值出现的问题及解决

    目录 使用@Value取值出现的问题 1.一般情况下定义一个字段 2.但是通常我们会把它用在工具类当中 3.工具类最好加上@Component或者其他注解 记springBoot使用@Value出现的乌龙 先看一下代码 然后在需要的地方如下使用 使用@Value取值出现的问题 在springBoot项目中我们一般会把一些路径或者资源写在配置文件中,方便管理. 但是取得时候有可能会出现一些问题. file.uploadFolder=E://upload/ 1.一般情况下定义一个字段 在上面使用@V

  • js 父页中的单选按钮取值

    int starvalue = 3; ContentPlaceHolder ch = (ContentPlaceHolder)Master.FindControl("middlecontent"); RadioButton radio = new RadioButton(); for (int i = 1; i <= 5;i++ ) { radio = (RadioButton)ch.FindControl("rblStar" + i); if (radio.

  • Java中float类型的范围及其与十六进制的转换例子

    float占用4个字节,和int是一样,也就是32bit.       第1个bit表示符号,0表示正数,1表示负数,这个很好理解,不用多管.       第2-9个bit表示指数,一共8为(可以表示0-255),这里的底数是2,为了同时表示正数和负数,这里要减去127的偏移量.这样的话范围就是(-127到128),另外全0和全1作为特殊处理,所以直接表示-126到127.      剩下的23位表示小数部分,这里23位表示了24位的数字,因为有一个默认的前导1(只有二进制才有这个特性).   

  • 关于Python 列表的索引取值问题

    目录 列表的索引取值 1. 列表的索引 2. 列表索引取值 3. 列表的正索引取值 4. 列表的负索引取值 5. 用列表本身取值 6. 从嵌套列表中取值 7. 课后练习 8. 总结 列表的索引取值 1. 列表的索引 和字符串一样,列表中的每一个元素也都有一个属于自己的编号,这个编号就是列表的索引. 2. 列表索引取值 通过字符串索引,我们可以取出字符串中的元素. 通过列表索引,我们可以取出列表的元素. [语法] 列表名或者列表本身. 英文中括号. 索引. 3. 列表的正索引取值 # 新建一个st

  • 在IE下:float属性会影响offsetTop的取值

    因需要定位某个HTML元素(例如:div)距离页顶的高度,想用offsetTop来取值,结果却发现CSS中如果使用了float:left;之类的写法后,竟然会导致取到的值不一样. 没有使用float:left;取的到值是正常值200; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

随机推荐