当前位置: 首页 > 面试题库 >

Java中的浮点数

贡可人
2023-03-14
问题内容

任何人都可以取悦我,为什么以下程序的输出不是“不同”?

public static void main(String[] args)
{

float f1=3.2f;
float f2=6.5f;

if(f1==3.2)
System.out.println("same");
else
System.out.println("different");

if(f2==6.5)
System.out.println("same");
else
System.out.println("different");
}

o / p:不同


问题答案:

6.5具有有限的二进制表示形式:110.1

具有至少4个有效位的任何浮点类型都可以完美地表示该数字。

110.100000000000000000000(浮点)
= 6.5

110.10000000000000000000000000000000000000000000000000000000000000(两倍)
= 6.5

另一方面,3.2具有无限的二进制表示形式:101.0011001100110011 …

浮点数和双精度数没有无限的精度,因此只能近似这个数字:(

101.001100110011001100110(浮点)
= 3.2000000476837158203125

101.00110011001100110011001100110011001100110011001101(double)
= 3.20000000000000017763568394002504646778106689453125

如您所见,这些数字并不相同!



 类似资料:
  • 问题内容: 我在工作表1左上角的单元格中有一个.xlsx电子表格。 Excel UI显示: 这在编辑栏中可见,即不受包含单元格设置为显示的小数位数的影响。这是Excel将为此单元格显示的最准确的数字。 在基础XML中,我们有: 当尝试使用Apache POI读取工作簿时,它通过Double.valueOf从XML中输入数字,并提供: 不幸的是,这与用户在Excel中看到的数字不同。谁能指出我的算法

  • 问题内容: 是否在任何地方都有Java库可以对IEEE 754半精度 数字执行计算或将其与双精度数字进行转换? 这些方法中的任何一种都是合适的: 将数字保持为半精度格式,并使用整数算术和位扭曲(如MicroFloat的单精度和双精度)进行计算 以单精度或双精度执行所有计算,转换成半精度以进行传输(在这种情况下,我需要经过良好测试的转换函数。) 编辑 :转换需要100%准确- 输入文件中 有 很多N

  • 本文向大家介绍DSP中浮点转定点运算--浮点数的存储格式,包括了DSP中浮点转定点运算--浮点数的存储格式的使用技巧和注意事项,需要的朋友参考一下 二:浮点数的存储格式 2.1 IEEE floating point standard   上面我们说了,浮点数的小数点是不固定的,如果每个人都按照自己的爱好存储在电脑里,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古老的问题前人早都

  • 问题内容: 如果我们运行以下代码: 它打印: 文字1.2345678990922222中的长尾将被忽略,但1.22222222222222222222中的长尾不会被忽略(变量d中的最后一个十进制数字变为3而不是2)。为什么? 问题答案: 打印a 或a 时看到的位数是Java的默认规则(从和转换为十进制)的结果。 Java的浮点数默认格式使用最少的有效十进制数字来将数字与附近的可表示数字区分开。1个

  • 我试图得到浮点数的尾数(只是为了学习),但它没有按预期工作。 比如说5.3的尾数是53,对吗?我尝试了以下代码: 它打印了2726298。它不应该去掉指数位并留下53吗?我尝试了很多事情,但总是这样。我做错了什么?

  • 我编写了一个程序来演示Go中的浮点错误: 它打印: 这与用C编写的相同程序的行为相匹配(使用双代码类型) 但是,如果改用,程序就会陷入无限循环!如果将C程序修改为使用而不是,它将打印 为什么在使用时,Go程序的输出与C程序的输出不一样?