说说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 ...
随机推荐
- hdu 2196(方法1:经典树形DP+方法2:树的直径)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- linux中直接进行系统调用和通过C库调用的示例
深入了解LINUX,这方面内容不可少,这段时间再补补.. #include <syscall.h> #include <unistd.h> #include <stdio ...
- radio和label关联问题,点击label改变颜色
$(function () { $("#fangan :radio[name='price']").bind('click', function (event) { //$(thi ...
- UVa247
题目连接(vj,比较方便):https://vjudge.net/problem/UVA-247 Description:If you’ve seen television commercials f ...
- hdu6158(圆的反演)
hdu6158 题意 初始有两个圆,按照标号去放圆,问放完 \(n\) 个圆后的总面积. 分析 圆的反演的应用. 参考blog 设反演圆心为 \(O\) 和反演半径 \(R\) 圆的反演的定义: 已知 ...
- ganglia笔记:rrds目录
因为原来的rrds目录挂载的盘不够用了,所以想修改一下目录,遇到权限的问题. 在一个owner为user的目录下面新建了./ganglia/rrds目录,并且./ganglia及其子文件夹都修改为ga ...
- Nginx+tomcat集群redis共享session应用方案
部署环境 主机 软件版本 192.168.88.1 nginx-1.12.2+redis-3.2.11 192.168.88.2 apache-tomcat-7.0.79 + jdk1.8 192.1 ...
- 中文名: 交通事故责任认定, 英文名称: Traffic accident responsibility identification
中文名: 交通事故责任认定, 英文名称: Traffic accident responsibility identification
- oracle delete all index own by table
BEGIN FOR ind IN (SELECT index_name FROM user_indexes WHERE table_name = '') LOOP execute immediate ...
- [BZOJ 1499] 瑰丽华尔兹
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1499 Solution : 能立即发现这是和动态规划相关的题目 令f[t][i][j]表 ...