【问题标题】:if statement not executedif 语句未执行
【发布时间】:2016-03-03 10:07:38
【问题描述】:

我遇到了未执行 if 语句的问题。下面的角是固定的,常量。 现在我想要一个静态变量 alphadrone 从一个角落移动到另一个角落。

第一个“如果”有效,第二个无效。

LATLON_TO_CM 是 1.113195f。我试图把 f 放在每个数字后面,使所有浮点数,双精度,语句不被执行。 这不符合逻辑,我将相同的数字放入两个变量(名称不同但数据类型相同)中,但它不起作用。

const int32_t corner_1_X = 47.590000 * 1e3 * LATLON_TO_CM;
const int32_t corner_1_Y = 7.646000  * 1e3 * LATLON_TO_CM; //bigger
const int32_t corner_2_X = 47.590000 * 1e3 * LATLON_TO_CM;
const int32_t corner_2_Y = 7.644000  * 1e3 * LATLON_TO_CM; //smaller

static int32_t alphadroneXposition = corner_1_X;
static int32_t alphadroneYposition = corner_1_Y;

// if (corner_1_Y > corner_2_Y)
    // moveAlphadroneYneg(&alphadroneYposition);
if (alphadroneYposition > corner_2_Y)
    moveAlphadroneYneg(&alphadroneYposition);

【问题讨论】:

  • 请提供一个最小但完整的示例。你提供的信息很少,不可能说什么。我猜整数溢出是造成混乱的原因。
  • 定义LATLON_TO_CM = 1,if 在这里执行得很好。注意溢出或不良转换。
  • 代码中alphadroneYposition值的任何变化都应该共享,否则条件类似
  • 您知道int32_t 是一个整数类型,但是您混合了double 无法在此处表示的精度并且只是丢失了?
  • 根据我的经验,您所看到的幽灵是代码和可执行文件不同步的结果。尝试重新构建您的项目(所有构建类型,即调试、发布等)。

标签: c++ if-statement static constants


【解决方案1】:

因此,出于某种原因,您的代码并没有说 alphadroneYposition 大于角位置,即使它有点大。我自己看了三遍,只是为了确认是的,第一个数字大一点。

alphadroneYposition = 7.646000 * 1e3

corner_2_Y = 7.644000 * 1e3

这通常是因为浮点精度和比较两个浮点数导致的错误。查看 stackoverflow 中关于比较浮点数的相关主题。

What is the most effective way for float and double comparison?

希望这会有所帮助!

【讨论】:

  • 这里给出的浮点值没有问题。迷信不能代替知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多