实例测试浮点数在内存中的存储状态
来源:互联网 发布:域用户安装软件权限 编辑:程序博客网 时间:2024/06/03 19:56
纯原创,如有问题欢迎指正,不胜感激
/*
* 0001 1001 0011 1101 0001 0000 1110 0111
* 这个数字二进制表示为上,其最高位在29位处,而浮点数float的存储位有23+1位,double
* 的存储位有52+1位。因此其存储为float是会损失精度的,约等于1.0*2^28,而且对尾数低位做
* 了截取,因此可以认为加上的1在存储时已经被截取掉了,在浮点数比较时不参与比较。
* 而如果将该数字存储到double中,则加1的结果会计入到比较结果中,因此产生不相等结果。
* 此时,如果我们再拿出一个数据,其二进制表示最高位大于52+1位,则加1之后结果依然会被
* 截取,会返回相等结果。稍后验证
* 如果将这个数字存储在int中,表示形式就是以上结果,加1之后只是进行了进位操作,
* 只要不产生溢出,不存在数据位损失的问题。因此比较结果为不相等
*/
public class Test0045{
public static void main(String[] args){
System.out.println("-----float比较结果-----");
float f1 = 423432423f;
float f2 = f1+1;
System.out.println(f1);
System.out.println(f2);
if(f1 == f2 ){
System.out.println("f1 == f2");
}else{
System.out.println("f1 != f2");
}
System.out.println("-----double比较结果-----");
double d1 = 423432423.0;
double d2 = d1+1;
System.out.println(d1);
System.out.println(d2);
if(d1 == d2){
System.out.println("d1 == d2");
}else{
System.out.println("d1 != d2");
}
System.out.println("-----int比较结果-----");
int n1 = 423432423;
int n2 = n1 + 1;
System.out.println(n1);
System.out.println(n2);
if(n1 == n2){
System.out.println("n1 == n2");
}else{
System.out.println("n1 != n2");
}
//验证一下double损失精度的情况?最高位57
//0001 0011 1111 1111 1111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println("-----double精度验证-----");
double d3 = 90071305352642561.0;
double d4 = d3 + 1;
System.out.println(d3);
System.out.println(d4);
if(d3 == d4){
System.out.println("d3 == d4");
}else{
System.out.println("d3 != d4");
}
}
}
/*
* 0001 1001 0011 1101 0001 0000 1110 0111
* 这个数字二进制表示为上,其最高位在29位处,而浮点数float的存储位有23+1位,double
* 的存储位有52+1位。因此其存储为float是会损失精度的,约等于1.0*2^28,而且对尾数低位做
* 了截取,因此可以认为加上的1在存储时已经被截取掉了,在浮点数比较时不参与比较。
* 而如果将该数字存储到double中,则加1的结果会计入到比较结果中,因此产生不相等结果。
* 此时,如果我们再拿出一个数据,其二进制表示最高位大于52+1位,则加1之后结果依然会被
* 截取,会返回相等结果。稍后验证
* 如果将这个数字存储在int中,表示形式就是以上结果,加1之后只是进行了进位操作,
* 只要不产生溢出,不存在数据位损失的问题。因此比较结果为不相等
*/
public class Test0045{
public static void main(String[] args){
System.out.println("-----float比较结果-----");
float f1 = 423432423f;
float f2 = f1+1;
System.out.println(f1);
System.out.println(f2);
if(f1 == f2 ){
System.out.println("f1 == f2");
}else{
System.out.println("f1 != f2");
}
System.out.println("-----double比较结果-----");
double d1 = 423432423.0;
double d2 = d1+1;
System.out.println(d1);
System.out.println(d2);
if(d1 == d2){
System.out.println("d1 == d2");
}else{
System.out.println("d1 != d2");
}
System.out.println("-----int比较结果-----");
int n1 = 423432423;
int n2 = n1 + 1;
System.out.println(n1);
System.out.println(n2);
if(n1 == n2){
System.out.println("n1 == n2");
}else{
System.out.println("n1 != n2");
}
//验证一下double损失精度的情况?最高位57
//0001 0011 1111 1111 1111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println("-----double精度验证-----");
double d3 = 90071305352642561.0;
double d4 = d3 + 1;
System.out.println(d3);
System.out.println(d4);
if(d3 == d4){
System.out.println("d3 == d4");
}else{
System.out.println("d3 != d4");
}
}
}
阅读全文
0 0
- 实例测试浮点数在内存中的存储状态
- 浮点数在内存中的存储方式
- 浮点数在内存中的存储形式
- 浮点数在内存中的存储格式
- 浮点数在内存中的存储方式
- 浮点数在内存中的存储格式
- 浮点数在内存中的存储方式
- 浮点数在内存中的存储方式
- 浮点数在内存中的存储格式
- 浮点数在内存中的存储
- 浮点数在内存中的存储方式
- 浮点数在内存中的存储
- 浮点数在内存中的存储格式
- 浮点数在内存中的存储方式
- 浮点数在内存中的存储格式 .
- 浮点数在内存中的存储方式
- 浮点数在内存中的存储格式
- 浮点数在内存中的存储方式
- 运动健身行业小程序开发详解
- 1.3 事务
- 微信小程序的一些小坑
- 《Linux设备驱动程序》第二章 笔记
- Android 版本控制 git 转 coding相关流程和问题
- 实例测试浮点数在内存中的存储状态
- 实验三、顺序栈
- HttpCLient实现对被GZip压缩过的Response进行解压
- Longest Increasing Subsequence问题及解法
- 欢迎使用CSDN-markdown编辑器
- Qt:接受拖放,简单应用
- MYSQL学习笔记——sql语句优化工具
- 解决IIS 远程无法支持HTTP POST访问的方法
- Python编程练习题mooc