我有以下代码(随意将float替换为double):
class A
{
public:
void setValueFloat(float v) {
m_floatValue = v / 3.6; // m/s <-> km/h conversion
}
void setValueInt(int v1, int v2) {
m_intValue1 = v1; m_intValue2 = v2;
}
bool conditionIsOk()
{
if(m_intValue1 > m_intValue2)
{
if(m_intValue1 - m_intValue2 > m_floatValue)
{
return true;
}
}
return false;
}
private:
int m_intValue1, m_intValue2;
float m_floatValue;
};
同时在其他地方:
A a;
int something = 5; // Intentionally int
int somethingElse = 6; //these are just some numbers, not production data!!!
int moreStuff = 7;
a.setValueFloat(something);
a.setValueInt(somethingElse, moreStuff);
if(a.conditionIsOk())
{
// Yippee!
}
以下是问题:
在上述情况下,将整数的算术运算结果与浮点数进行比较有多安全?
对于这种情况,是否需要使用
(float)m_intValue1 - (float)m_intValue2 > m_floatValue
?在 C / C++ 标准中,我可以在哪里找到关于这种情况的说明?
对于简单的情况
m_intValue1 - m_intValue2 > m_floatValue
,默认会执行哪些类型转换?(如何以一种使他人也能看到的方式展示这一点呢?仅凭信任是不够的:)
class
,就可以了。我更感兴趣的是背后的理论。 - Ferenc Deakif(2 > 2.5)
是否“安全”。 - ciphermagiclass
是不足以使 C 代码合法的。至少需要移除public:
、private:
并重新排列代码。如果帖子涉及到 C 和 C++,请提供一个适用于两者的示例 - 这会让问题的许多观看者更容易理解。此外,可能会涉及到微妙的语言规范,这可能会导致两种不同的答案,因此完整的答案需要对两种语言有深入的了解。这限制了能够回答问题的人数,可能超出您的需求。 - chux - Reinstate Monica