gpt4 book ai didi

c - Arduino乘法错误,+ve * +ve变成-ve

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:40 25 4
gpt4 key购买 nike

我正在使用模拟 Collatz conjecture 的简单脚本对不同平台和语言进行基准测试.在测试期间,我发现我的 arduino 卡在种子 447 上,其中将 int 13121 乘以三得到 -26173。

我的初始代码是`

//made by Hugo K 
//jun 13 2014




void setup()
{
Serial.begin(9600);
while (!Serial)
{
;//wait for serial to connect
}

}


void loop()
{
unsigned long starttime;
starttime = millis();
for (int i = 1; i <= 500; i++)
{
int a = i;
while (a != 1)
{
if (a%2 == 0)
{
a = a/2;
}
else
{
a = (a*3) + 1;
}
//Serial.println(a);
}

}
Serial.println(millis() - starttime);
}`

后来通过`

确认
void setup()
{
Serial.begin(9600);
while(!Serial)
{
}

}


void loop()
{
int i = 13121;
Serial.println(i *3);

}`

是不是里面的atmega微 Controller 有问题?还是 int 13121 有问题会扰乱传统的乘法?

最佳答案

由于此架构中的 sizeof(int) == 2,最大正整数为 0x7FFF (32,767),而在您的情况下为 39363。

使用 unsigned int 会将您的最大值增加到 0xFFFF

使用 unsigned long - 到 0xFFFFFFFF

关于c - Arduino乘法错误,+ve * +ve变成-ve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24729846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com