LUA,C#中float型和double型的隐式舍入操作
来源:互联网 发布:c语言打印等腰杨辉三角 编辑:程序博客网 时间:2024/06/05 18:09
在学习LUA的过程中,发现了如下现象:
根据《魔兽世界脚本编程宝典的描述》对这一情况的描述,可以确定该状况的发生应该和浮点数本身采用的IEEE编码格式有关系;
那么这一现象应该也存在于其他语言。针对这一情况,在C#中进行了测试。
float x = 1.2f; float y = 1.0f; Console.WriteLine((x - y) > 0.2f); Console.WriteLine(1.2f-1.0f); double a = 1.2d; double b = 1.0d; Console.WriteLine((a - b) > 0.2d); Console.WriteLine(0.2f > 0.2f);
结果却完全相反
由此可见,在发生计算时,两种语言在使用float形进行计算时都发生了隐式的转换。
这应该是由浮点数的特殊存储方式决定的,和两种语言的float型的编码机制有关,由于浮点数内部使用二进制保存的,因此和十进制转换有误差。
在实际应用中,存储空间宽裕的情况下最好统一使用double类型,即便使用float类型也要配对使用,避免在传值和比较时出现隐藏bug。
0 0
- LUA,C#中float型和double型的隐式舍入操作
- Float型和Double混用的结果
- c#中decimal ,double,float的区别
- c#中decimal ,double,float的区别
- C#中decimal, double, float的区别
- c#中decimal ,double,float的区别
- c#中decimal ,double,float的区别
- c#中decimal ,double,float的区别
- c#中decimal ,double,float的区别
- c#中decimal ,double,float的区别
- c#中decimal ,double,float的区别
- C#的float,double和decimal
- float和double的操作记录
- Java中double和float的区别
- java中float和double的区别
- java中float 和double的区别
- C#中DECIMAL ,DOUBLE,FLOAT
- Java中浮点型数据Float和Double进行精确计算的问题
- Android热修复学习(三)微信热修复 tinker
- C++ 变量类型
- netty启程之路(一):Linux的五种网络I/O模型
- Redis jedis API注释
- APK反编译
- LUA,C#中float型和double型的隐式舍入操作
- CentOS安装jdk1.8
- C++数组
- [Presto]部署运行Presto
- Jd-Gui报错INTERNAL ERROR
- 操作数的寻址方式(立即,寄存器,直接)
- fedora 24 nfs 服务器搭建
- Java基础学习总结——Java对象的序列化和反序列化
- java获取用户输入