说说C#的数学类,Math,浮点数(上)
说说C#的数学类,Math,浮点数
C#语言支持下图所看到的的数值类型,各自是整数,浮点数和小数
可能不是非常清楚,可是细致看看还是能看清楚的.
在一个C#程序中,整数(没有小数点的数)被觉得是一个int类型(除非其值大于最大的int值),依据数据值,该数据依次被视为uint,ling,ulong,带小数点的数被觉得是一个double值.这就是说(1.0).GetType()==typeof(double).
当中类型前面的字母’u’代表无符号的意思.由于无符号,所以u代表了数据是整数或0,不可能是负数.
检查整数溢出
考虑以下代码:
short s=32767;s+=1;
ushort us=0;us-=1;
在第一个情况下,一个有符号的数加1,经过其最大值,因为整数在内存中存储方式的原因,结果是-32768.
另外一种情况,一个无符号的数被减为小于0,结果将是65535.
这两个样例各自是上溢出和下溢出的情况,假设想避免这样的情况的发生,能够使用checkedkeyword:
short s=32767;
checked
{
s+=1;//将会产生一个上溢出
}
或者使用以下的编译器开关:
/checked+
默认编译器开关相应为:
/checked-
迄今为止,都在收执行时的整数向上或向下溢出检查,在默认情况下编译器会将编译时的向上和向下溢出标记为一个错误,而和你的编译器开关无关.
比如语句:short s=32767+1;这会产生一个编译时错误,由于在编译期间对加法进行求值.
比如以下这个案例;
const int i1=65536;
const int i2=65536;
int i3=i1*i2;
由于i1,i2都是const值,所以编译器在编译的时候会尝试对i3=i1*i2进行求值,并遇到一个向上溢出.所以会导致编译错误.
编译器开关不会覆盖这一行为,可是uncheckedkeyword能够覆盖这样的行为.
int i3=unchecked(i1*i2)能够正常通过编译.
小数类型
decimalkeyword表示128位数据类型.同浮点型相比,decimal类型具有更高的精度和更小的范围,这使它适合于財务和后比计算.decimal类型的大致范围和精度看上面的图.
它使用16字节(128位)存储每个值.128位被划分为96位整数位,一个符号位,一集一个能够在0-28之间变化的比例因子.在数学上,这个比例因子是一个10的负指数幂,表示数值中小数点位置的编号.
比如,假设一个小数定义等于12.34,那么这个数的存储方式是整数0x4D2(后1234),以及一个比例因子2.
仅仅要一个小数具有(或小于)28个有效数字以及(或小于)28个小数位置,decimal 数据类型就能够准确的存储它.对于浮点数而言,这是不成立的.\!假设定义一个float值等于12.34,那么它会被存储为0xC570A4(或12939428)除以0x100000(或1048576),这个值等于12.340000152587890625约等于12.34,即使将一个double值定义为12.34,他也是一个约等于12.34的数.
这就是你爱不想让美分神奇的出现和消失的地方运行计算时应该使用decimal的原因,由于浮点数不精确,浮点数据类型在科学和project应用方面非常合适,可是在金融应用不好使.
说说C#的数学类,Math,浮点数(上)的更多相关文章
- Java基础__Java中常用数学类Math那些事
测试 package Cynical_Gary; public class Cynical_Text { public static void main(String[] args){ System ...
- Java开发知识之Java的数字处理类Math类
Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...
- Java数学函数Math类
Java数学函数Math类常用: Math.abs(12.3); //12.3 返回这个数的绝对值 Math.abs(-12.3); //12.3 Math.copySign(1.23, -12.3) ...
- 数字(数学)操作类 Math Random 类 ,大数字操作类
Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法
- Math 数学类
/* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(float ...
- Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
System类 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被priva ...
- Lua 数学类
数学类主要有Vec2(坐标向量).Size(尺寸).Rect(矩形). 创建 在Lua中创建的 Vec2.Size.Rect 都是一个table类型. 其中只有相应的成员变量,没有相关的函数运算. c ...
- 处理数字的类 —— Math类 、 Random类 、 BigDecimal类 与 BigInteger类
在我们学习C语言时,我们处理数据时要调用很多函数,那么,Java也有很多的方法可以来处理数值的类. 那么,在本篇博文中,本人就来讲解三个用于处理数值的类 -- Math类 . Random类 与 Bi ...
- Java:日历类、日期类、数学类、运行时类、随机类、系统类
一:Calendar类 java.util 抽象类Calendar 1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int ...
随机推荐
- [转]python dubbo接口测试
转自:https://www.cnblogs.com/chunyanxu/p/8732734.html 会吐泡泡的鱼 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 57 文章- 0 评论- ...
- Nvidia 的新显卡架构 Maxwell 性能相比开普勒提升了多少?
作者:喵西和熊链接:https://www.zhihu.com/question/22630075/answer/29041618来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- hihocoder 1174 [BFS /拓扑排序判断是否有环]
hihocoder 1174 [算法]: 计算每一个点的入度值deg[i],这一步需要扫描所有点和边,复杂度O(N+M). 把入度为0的点加入队列Q中,当然有可能存在多个入度为0的点,同时它们之间也不 ...
- HDU 1711 Number Sequence【kmp求子串首次出现的位置】
Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= ...
- [BZOJ 1794] Linear Garden
Link: BZOJ 1794 传送门 Solution: IOI2008官方题解:传送门 要求序号,其实就是算字典序比其小的序列个数 从而使用数位$dp$的思想来解题,关键在于维护序列要$balan ...
- TZOJ 删除前导多余的*号
描述 规定输入的字符串中只包含字母和*号,编写程序使字符串中前导的*号不得多于n个:若多于n个,则删除多余的*号:若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除. 输入 输入数据包括一串 ...
- Spark IDEA 调试(反编译)
1)以WordCount为例,具体代码如下: import org.apache.spark.SparkConf import org.apache.spark.SparkContext; impor ...
- 杂谈PID控制算法——第一篇:三个量
电赛训练了大半个暑假,人渐渐开始进入到了疲倦期.既然这样那就好好休息下自己也好吧. 休息也不能光休息,乘机把平常写过的一些东西好好整理也好. 从第一次训练开始我们就接触到了一个新的名词——PID控制理 ...
- [HTML/CSS]盒子模型,块级元素和行内元素
目录 概述 盒子模型 块级元素 行内元素 可变元素 总结 概述 在div+css中,了解块级元素和行内元素还是非常有必要的,比如:对行内元素使用width属性就会失效.虽然自己不是做前端的,但是,在项 ...
- 转载:win10 下安装32位的Oracle 11g 客户端(问题:环境不满足最低要求)
1. 在安装文件夹中,找 stage->cvu->cvu_prereq.xml文件. 2. 用记事本打开其xml文件进行编辑,加下面一段保存. <OPERATING_SYSTEM R ...