1
11
注意以下几点。 这两个数字与16位小数相同。差不多有48位是一样的。 在ieee 64位浮点数中,所有的位都不是符号或指数。
这个
我想你看到的是
|
2
8
您要做的是打印出pi值的原始位模式并进行比较。 在Java中使用 http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#doubleToRawLongBits(double) 方法获取应打印为二进制文件的长值。 Java 5给出:
在C语言中,你可以
|
3
3
很难计算出相同的值, 即使起始值相同 . 浮点计算结果有时不同于体系结构(例如,认为X86/PowerPC),从编译器到另一个(认为GCC/MS C++),甚至使用相同的编译器,但不同的编译选项。不总是,但有时(通常在舍入时)。通常情况下,问题被忽略的时间已经足够晚了(在多次迭代和许多舍入差之后再考虑) 这使得跨平台的多玩家游戏很难同时计算游戏状态的每次迭代(每个节点只接收输入,而不是实际的数据结构)。 因此,即使在同一种语言(C/C++)中,结果也可能不同,从Java VM到本地主机也可能不同。 更新: 我找不到我读到的来源,但我发现 paper by Sun 关于这件事。 就像你自己回答的那样, java.lang.math.pi和gccs m_pi可以管理为具有相同的值 . 魔鬼隐藏在这些价值观的使用中。ieee没有指定数学函数(sin,cos,exp,…)的输出。因此它是 计算结果 这不一定相同。 |
4
2
是的,它们是相等的,并且使用它们将确保相同算法的GCC和Java实现在同一基础上——至少和使用手工定义一样多。
一个警告,暗示
S. Lott
,即gcc实现必须保持
PixByth.C:
pi_bytes.java:
同时运行:
基本表现
–如所述 Steve Schnepp ,数学函数(如sin、cos、exp等)的输出不能保证相同,即使这些计算的输入按位相同。 |
5
1
一个双精度数只有52位左右的符号,所以我认为它只能给你15个10位数的基数,这就解释了为什么你要求20位数时有5个零。 |
6
1
您可以使用bigdecimal来获得更高的精度,例如:
|
7
-1
使人想起在fortran中必须为pi取一个值。 因为没有常数库,所以我要么使用 4*atan(1.)或acos(-1.)。 |
8
-3
不,他们不平等,他们在记忆中有不同的表现。 一般来说,当您想要比较两个浮点值时,您不能使用==(如果是这样,您就不能使用term'equals'进行操作)。你应该和epsilon比较。
|
Rik Bloemers · for循环不接受任何浮点变量 2 年前 |
zell · 为什么存储7个浮点数需要34字节? 2 年前 |
Atharva Sunil Sathe · 如何删除任意数的小数点? 2 年前 |
user1658887 · 为什么**2!=a*a一些彩车? 6 年前 |