Tag: 浮点

哪种类型的Web应用程序可以真实地受到浮动bug的影响?

有一种简单的方法可以完全锁定很多JVM: class runhang { public static void main(String[] args) { System.out.println(“Test:”); double d = Double.parseDouble(“2.2250738585072012e-308”); System.out.println(“Value: ” + d); } } 或者,挂起编译器: class compilehang { public static void main(String[] args) { double d = 2.2250738585072012e-308; System.out.println(“Value: ” + d); } } 如下所述: http : //www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/ 我的问题非常简单:您知道哪种精心构思的Web应用程序可以实际受此影响? 换句话说:攻击者可以使用哪种Web应用程序使用已知的弱点执行拒绝服务 ? 这很糟糕,非常糟糕。 但是除了使用浮点进行货币计算的程序员之外,我没有看到许多可以崩溃的Java支持的网站。 我可以看到玩具科学小程序是候选人但除此之外…… 这是被阻塞线程的一个线程(在Linux上使用“kill -3”完成): “main” prio=1 […]

在java中截断浮点数和双精度数

我想在java中截断一个float和一个double值。 以下是我的要求:1。如果我有12.49688f,它应该打印为12.49而不会四舍五入2.如果它是12.456的双倍,它应该打印为12.45而不会四舍五入3.在任何情况下,如果值是这样的12.0,应仅打印为12。 条件3应始终牢记在心。它应与截断逻辑并发。

Java中对NaN的困惑

int i = 0, j = 0; double nan1 = (double)0/0; double nan2 = (double)0/0; double nan3 = (double)i/j; System.out.println(Double.doubleToRawLongBits(nan1) == Double.doubleToRawLongBits(nan2)); System.out.println(Double.doubleToRawLongBits(nan1) == Double.doubleToRawLongBits((double)0/0)); System.out.println(Double.doubleToRawLongBits(nan3) == Double.doubleToRawLongBits(nan2)); 输出: true true false 请帮我看看前两个输出是如何true ,前一个输出是false的。 请告诉我Double.doubleToRawLongBits()方法的实际工作是什么。

将wav音频格式字节数组转换为浮点数

我正在使用Java AudioInputStream读取.wav音频文件。音频文件是16位PCM签名,samplerate = 44100,framesize = 2,framelength = 114048.我设法以字节数组的forms获取音频数据但是我我不确定我应该为这个字节数组分配多少大小,以便我可以将它转换为floatinf点值。 我正在使用Goertzel算法进行一些音频操作,该算法接受浮点数组的输入,例如“float [] x”。 下面是我正在使用的一些代码片段。 提前致谢。 try { AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(fileIn); } while ( numBytesRead != -1) { numBytesRead = audioInputStream.read(audioBytes); // Logic goes here floatValue = byteArrayToFloat(audioBytes); }

Java:浮点格式取决于Locale

我住在比利时。 一般来说,在数学中,我们用逗号这样写小数:3,141592 这也是我格式化浮点数时的结果。 System.out.println(String.format(“%f”, 3.141592)); 所以, . 被替换为a ,如: 3,141592 。 因此,当我需要一个点时,我必须添加如下内容: String.format(“%f”, 3.14).replace(‘,’,’.’); 所以,问题是:有没有办法改变Locale,这使得Java中的每个格式化程序都使用一个点而不是逗号? 谢谢 System.out.println(Locale.getDefault()); 版画 nl_BE

减去两个十进制数,给出奇怪的输出

当我玩Java Puzzlers的代码(我没有这本书)时,我遇到了这段代码 public static void main(String args[]) { System.out.println(2.00 – 1.10); } 输出是 0.8999999999999999 当我尝试将代码更改为 2.00d – 1.10d仍然得到与0.8999999999999999相同的输出 对于, 2.00d – 1.10f输出为0.8999999761581421 对于2.00f – 1.10d输出为0.8999999999999999 对于, 2.00f – 1.10f输出为0.9 为什么我首先得到的输出为0.9 ? 我不能做出任何头或尾? 有人可以清楚说明这一点吗?

如何确定double的最大精度

我试图确定双精度的最大精度是多少。 在此链接中对已接受答案的注释中, 在Java中保留精度为double @PeterLawrey表示最大精度为15。 你怎么决定这个?

格式化双精度而不是四舍五入

我需要格式化(而不是舍入)一个double到2位小数。 我尝试过: String s1 = “10.126”; Double f1 = Double.parseDouble(s1); DecimalFormat df = new DecimalFormat(“.00”); System.out.println(“f1″+df.format(f1)); 结果: 10.13 但我要求输出为10.12

如何快速检查是否适合浮动? (JAVA)

是否有一些算术或按位运算可以检查双精度是否适合浮点而不会损失精度。 它不仅要检查双范围是否在浮点范围内,还要检查没有尾数位丢失。 再见 PS:这解决了C#中途的问题: 如何在不转换为无穷大的情况下检查双精度是否适合浮点但是我需要一个适用于Java的解决方案。

在Java中比较float和int是否安全?

比较浮点数和这样的整数是否安全? private static void foo(float n) { if (n >= 1 || n <= 0) { // code } } 根据JLS(5.6.2。二进制数字促销),如果其中一个参数是float ,则另一个参数在比较之前转换为float 。 但据我所知,如果转换后的浮点数与原始浮点数相同,则这种比较将返回true。 我们如何确保它?