Java中float和double的范围是多less? 为什么不build议在精度要求很高的情况下使用float或double?
许多使用IEEE 754双打的编程语言提供了一个库函数来将这些双精度转换为string。 例如,C有sprintf ,C ++有stringstream ,Java有Double.toString等 在内部,这些function是如何实现的? 也就是说,他们使用什么algorithm将double转换成string表示,因为它们通常受到程序员select的精度限制? 谢谢!
我已经input到python shell中: >>> 0.1*0.1 0.010000000000000002 我预计0.1 * 0.1不是0.01,因为我知道基数10中的0.1是基数2中的周期。 >>> len(str(0.1*0.1)) 4 我预计会得到20,因为我已经看到20个以上的字符。 我为什么得到4? >>> str(0.1*0.1) '0.01' 好吧,这解释了为什么我len给了我4,但为什么str返回'0.01' ? >>> repr(0.1*0.1) '0.010000000000000002' 为什么这样做,但不是? (我已经阅读了这个答案 ,但是我想知道他们是如何决定什么时候浮动的,什么时候没有) >>> str(0.01) == str(0.0100000000001) False >>> str(0.01) == str(0.01000000000001) True 所以这似乎是花车的准确性问题。 我以为Python会使用IEEE 754单精度浮点数。 所以我已经检查过了 #include <stdint.h> #include <stdio.h> // printf union myUnion { uint32_t i; // unsigned integer 32-bit type (on […]
可能重复: 如何将十进制数值四舍五入到小数点后两位(在页面上输出) 我想截断像下面的小数 即 2.22939393 – > 2.229 2.22977777 – > 2.229
在algorithm的某个时刻,我需要将一个类的属性的float值与一个float进行比较。 所以我这样做: if (self.scroller.currentValue <= 0.1) { } 其中currentValue是一个浮动属性。 但是,当我有相等和self.scroller.currentValue = 0.1的if语句不履行和代码不执行! 我发现我可以通过投0.1来解决这个问题。 喜欢这个: if (self.scroller.currentValue <= (float)0.1) { } 这工作正常。 任何人都可以解释为什么这是发生? 0.1被定义为一个默认的双重或东西? 谢谢。
我有一个浮点数,比如说135.12345678910 。 我想将该值连接到一个string,但只想要135.123456789 。 通过打印,我可以通过执行以下操作轻松完成此操作: print "%.9f" % numvar numvar是我的原始数字。 有没有一个简单的方法来做到这一点?
这是多年来一直在我心中的事情,但我从来没有花时间去问。 许多(伪)随机数发生器产生0.0到1.0之间的随机数。 在math上,在这个范围内有无限数字,但double是一个浮点数,因此具有有限的精度。 所以问题是: 在0.0和1.0之间有多less个double数? 1和2之间的数字是否一样多? 在100和101之间? 在10 ^ 100和10 ^ 100 + 1之间? 注意:如果它有所作为,我特别感兴趣的是Java的double定义。
假设我的Java程序的瓶颈确实是一些紧密的循环来计算一堆向量点产品。 是的,我已经介绍过了,是的,这是瓶颈,是的,这是重要的,是的,algorithm是如何,是的,我运行Proguard优化字节码等。 这项工作本质上是点产品。 如在,我有两个float[50] ,我需要计算成对产品的总和。 我知道存在处理器指令集来快速和批量执行这些操作,如SSE或MMX。 是的,我可以通过在JNI中编写一些本机代码来访问这些代码。 JNI电话变得非常昂贵。 我知道你不能保证什么JIT将编译或不编译。 有没有人听说过使用这些指令的JIT生成代码? 如果是这样的话,有没有什么关于Java代码可以帮助这样编译的? 可能是“不”; 值得问。
当我做这个乘法 0.94 * 8700 输出是 8177.999999999999 但应该是 8178 我使用java,但我不认为这个错误是与一个特定的编程语言现在我的问题是…为什么发生这种情况? 和其他数字(只是一个例子)导致相同的错误?
这个问题的答案可能是很明显的,但我无法在Mozilla文档中find它,也不能在粗略的search中find它。 如果你有这样的代码 Number.MAX_VALUE + 1; // Infinity, right? Number.MIN_VALUE – 1; // -Infinity, right? 然后,我期望添加任何内容到Number.MAX_VALUE将推到Infinity 。 结果只是Number.MAX_VALUE吐在我身后。 但是,当在Chrome JS控制台中玩耍时,我注意到它实际上并没有成为Infinity直到我加/减足够多: Number.MAX_VALUE + Math.pow(100,1000); // now we hit Infinity Number.MIN_VALUE – Math.pow(100,1000); // -Infinity at last Number.MAX_VALUE和Infinity之间的“缓冲区”是什么?