我知道比较两个doubles
有问题,如果它们是从不同的计算中获得的。但是,如果其中一个是另一个的副本(价值),这是否也适用。以下几行解释了这种情况。如果我有这样的)问题,比较float和它的副本
double a,b;
a=randdouble();/*some double value*/
b=a;
然后,
Q1是比较a==b
始终保证在C编译器的情况下返回true
(我有gcc 6.1.1
)? Q2)如果我使用malloc
在堆内存中分配变量a
和b
,那么上述答案是否保持不变?
Q3)请问上述答案仍然是相同的,如果我有一个Java编译器(我使用Open JDK 1.7.0
)与ofcourse必要的语法改变取代C编译器。
编辑1:数字a
和b
是!= NaN
1)否,2)是,3)是 –
@EugeneSh。为什么'b = a'不会导致'b == a'成立。这是内存或寄存器的直接副本。 –
@JoshSanford问题是关于*保证*。 –