首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C& Stellaris Launchpad时意外的除法/乘法行为

使用C& Stellaris Launchpad时意外的除法/乘法行为
EN

Stack Overflow用户
提问于 2013-05-24 01:24:31
回答 1查看 151关注 0票数 0

今天发生了一些奇怪的事情。由于一些奇怪的原因,我不能使值的除法或乘法工作,甚至在将值写入变量后读出它也不起作用。下面是有问题的代码片段:

代码语言:javascript
复制
void Turning(heading,desiredheading){
//Boats heading too high

if (heading>desiredheading){
    if ((heading - desiredheading) <10 ){
        g_ulServoPulse[1]=makeAngle(5);
        g_ulServoPulse[2]=makeAngle(5);
    }else if((heading - desiredheading) <54 ){
        g_ulServoPulse[1]=makeAngle(27);
        g_ulServoPulse[2]=makeAngle(27);
    }else{
        g_ulServoPulse[1]=makeAngle((heading-desiredheading)*0.5);
        g_ulServoPulse[2]=makeAngle((heading-desiredheading)*0.5);

    }
//Boat is heading too low
}else if(desiredheading > heading){
    if ((desiredheading -heading) < 10 ){
        g_ulServoPulse[1]=makeAngle(-5);
        g_ulServoPulse[2]=makeAngle(-5);
    }else if ((desiredheading -heading) < 54 ){
        g_ulServoPulse[1]=makeAngle(-27);
        g_ulServoPulse[2]=makeAngle(-27);
    }else{
        g_ulServoPulse[1]=makeAngle((desiredheading-heading)*-0.5);
        g_ulServoPulse[2]=makeAngle((desiredheading-heading)*-0.5);}
        int temp = desiredheading-heading;
        //temp = temp ;
        UARTprintf("Wasp\n");
        UARTprintf("%d\n", desiredheading);
        UARTprintf("%d\n", heading);
        UARTprintf("%d\n", (desiredheading-heading));
        UARTprintf("%d\n", temp);

//Boat is Just right
}else{
    g_ulServoPulse[1]=makeAngle(0);
    g_ulServoPulse[2]=makeAngle(0);
    UARTprintf("Table\n");
}
}

因此,它只是一个简单的比较器,对某一范围的值进行操作。“temp”在代码中的位置是temp*0.5和temp*2.0,不管是哪种情况,都是巨大的错误。事实上,即使只是写出temp也是错误的,如下面的输出所示。

代码语言:javascript
复制
Wasp
180
177
3
1074266112

Wasp
180
150
30
1077805056

我看不出倒数第二个和最后一个输出有什么不同的原因。这只是为了输出temp,正如前面提到的,乘法和除法也存在同样的问题。

任何关于:为什么会发生这种情况以及如何解决它的见解都将不胜感激。

干杯。

编辑:显然,有一种奇怪的环行交叉口方法来使其行为。

代码语言:javascript
复制
int temp = desiredheading-heading;
temp &= 0xFF ;

使其正确返回。尽管我完全不知道为什么这样做,也不知道是什么导致了最初的行为。

EN

回答 1

Stack Overflow用户

发布于 2013-05-24 02:07:04

我真的认为显示的代码和给出的结果之间存在脱节。

代码语言:javascript
复制
UARTprintf("%d\n", temp); --> 1074266112

这就是你会得到的,你做了这种不匹配的格式和数据类型。

(由于@Daniel Fischer反馈而应用的更正)

代码语言:javascript
复制
UARTprintf("%d\n", 3.0);  --> 1074266112 = 0x40080000
UARTprintf("%d\n", 30.0); --> 1077805056 = 0x403E0000

请仔细检查临时、标题和所需标题的类型。另外,temp真的是通过"int temp = desiredheading-heading;“来声明和计算的吗?

看起来"UARTprintf("%d\n",temp);“中的temp是一个双精度。

晴朗的风

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16720203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档