Tag: 浮点

为什么将Double.NaN转换为int而不是在Java中抛出exception?

所以我知道IEEE 754为非实数的值指定了一些特殊的浮点值。 在Java中,将这些值转换为原始int不会像我期望的那样抛出exception。 相反,我们有以下内容: int n; n = (int)Double.NaN; // n == 0 n = (int)Double.POSITIVE_INFINITY; // n == Integer.MAX_VALUE n = (int)Double.NEGATIVE_INFINITY; // n == Integer.MIN_VALUE 在这些情况下不抛出exception的理由是什么? 这是IEEE标准,还是仅仅是Java设计者的选择? 如果这种演员阵容有例外情况,我是否会发现不良后果?

长浮点数输出显示字母

我有以下代码: String curDir = “.”; File fileObject = new File(curDir); File[] fileList = fileObject.listFiles(); float fileLengthMegabytes = (float)fileList[i].length() / 1000000; 方法fileList [i] .length()返回311字节作为Long类型。 前面的代码产生以下输出: 3.88E-4 如何在fileLengthMegabytes变量中获得预期的输出0,000311?

如何在Java中实现“快速反平方根”?

我听说过这里讨论的“快速反平方根”,我想将它放在我的Java程序中(仅用于研究目的,因此忽略有关本机库的任何更快的事情)。 我正在查看代码,C代码直接将float转换为带有一些C指针魔术的int 。 如果你尝试在带有强制转换的Java中执行此操作,它就不起作用:java会截断浮动(正如您所期望的那样),并且您无法获取基元的指针(就像在C中一样)。 那你怎么做的?

float / int隐式转换

我正在做float和int的乘法和除法,我忘记了隐式转换规则(问题中的单词看起来太模糊了,谷歌比在这里要求更快)。 如果我有两个int ,但我想做浮点除法,我是否只需要转换一个或两个操作数? 乘法怎么样 – 如果我乘以一个float和一个int ,答案是float ?

检查双重平等是否安全?

我有以下代码: double x = 0; { …do stuff …} if(x == 0){ } 我总是被告知你不应该检查花车的平等性。 检查它是否等于零任何不同?

在Java中表示浮点值

看下面的三行代码。 float f = 1; float g = 1.1; float h = 1.1f; 第二行有编译错误,而其他行没有编译错误。 第一行工作正常,没有后缀f,第三行使用后缀f。 为什么是这样?

如何在Java中将hex字符串转换为float?

如何在Java中将hex字符串转换为单精度浮点? 例如,如何实现: float f = HexStringToFloat(“BF800000”); // f现在应该包含-1.0 我问这个因为我试过了: float f = (float)(-1.0); String s = String.format(“%08x”, Float.floatToRawIntBits(f)); f = Float.intBitsToFloat(Integer.valueOf(s,16).intValue()); 但我得到以下exception: java.lang.NumberFormatException:对于输入字符串:“bf800000”

这个部门出了什么问题?

这是代码: class testsum { public static void main(String arg[]) { double sum=0; double fraction; fraction=-1/9; System.out.println(“fraction: “+fraction); fraction=-1; fraction=fraction/9; System.out.println(“fraction: “+fraction); } } 输出为0 ,然后为-0.11111111 为什么第一个输出0而不是-0.11111111111 ?

Java双精度和麻烦

我想知道为什么我会收到这个错误。 (这是Eclipse调试的显示日志) var (double) 2.8 tot.getIva() (java.lang.Double) 0.17 var+tot.get() (double) 2.9699999999999998 我不明白为什么我没有简单地得到2.97!

针对SSE2前处理器的Java运行时如何实现浮点基本操作?

当设置strictfp时,(没有)针对没有SSE2的英特尔处理器的Java运行时如何处理浮点非正规数? 即使将387 FPU设置为53位精度,它仍保持超大的指数范围: 强制检测每个中间结果的下溢/溢出,和 这使得很难避免非正规的双重舍入。 策略包括重新计算导致模拟浮点的非正规值的操作,或者沿着这种技术的线路的永久指数偏移,为OCaml配备63位浮点数,从指数借用一点以避免双重-四舍五入。 在任何情况下,除非可以静态地确定操作不下溢/溢出,否则我认为没有办法避免每个浮点计算至少有一个条件分支。 如何处理exception(溢出/下溢)情况是我的问题的一部分,但这不能与表示的问题分开(永久指数偏移策略似乎意味着只需要检查溢出)。