说说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 ...
随机推荐
- Deep Learning关于Vision的Reading List
最近开始学习深度学习了,加油! 下文转载自:http://blog.sina.com.cn/s/blog_bda0d2f10101fpp4.html 主要是顺着Bengio的PAMI review的文 ...
- Python 进阶 之 协程
协程的概念级描述(与线程对比):转自知乎 链接 线程有两个必须要处理的问题:一是碰着阻塞式I\O会导致整个进程被挂起: 二是由于缺乏时钟阻塞,进程需要自己拥有调度线程的能力. 如果一种实现使得每个线程 ...
- Centos 7 设置 DNS
1:nmcli con mod eno1 ipv4.dns "114.114.114.114 8.8.8.8" eno1:为网卡名 2:nmcli con up eno1 激活网卡
- JAVA集合操作的利器:CollectionUtils
使用 CollectionUtils 中四个方法之一执行集合操作.这四种分别是 union(),intersection();disjunction(); subtract(); 下列例子就是演示了如 ...
- web模拟telnet
https://blog.csdn.net/midion9/article/details/51781402 https://blog.csdn.net/hackstoic/article/detai ...
- Nodejs微信开发使用wechat-api回复多条消息
在上一往篇文章<Nodejs微信开发>中,微信后台能够正常的接收到客户端的消息,并能够简单的回复一条消息至客户端. 但我的目录是将微信与Bot Framework进行关联,那么肯定就有一些 ...
- CF982 C Cut 'em all!【树/DFS/思维】
[链接]:CF982C [题意]:有一颗树,你需要切掉一些边,使这颗树分拆成若干个节点为偶数的联通分量,最多能切掉几条边.若不能切,输出-1. [分析]: 1.若点数n为奇数,因为奇数不可能分为偶数, ...
- 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)
P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...
- sqlplus terminators - Semicolumn (;), slash (/) and a blank line
The problem here is the way SQL*Plus interprets the commands passed to it. Remember the "SQL co ...
- java中集合里的泛型
import java.util.ArrayList;/* * 泛型 : java jdk1.5新特性. * 泛型的好处 : * 1.将运行时的错诶提前到编译时. * 2.避免无谓的强制类型转换. * ...