Hi, here is a further curious effect with 32bit arithmetic:
This sketch on an ATtiny84
#include <SoftwareSerial.h>
SoftwareSerial mySerial(5, 6); // RX, TX
uint32_t baudrt;
uint16_t lcnt = 0;
uint8_t val8;
uint16_t val16;
uint32_t val32;
int32_t valm32;
int16_t valm16;
void setup() {
// put your setup code here, to run once:
baudrt = 38400;
mySerial.begin(baudrt);
delay(50);
mySerial.println();
mySerial.print("Baudrate=");
mySerial.println(baudrt);
valm32 = -1234567890;
mySerial.print(valm32);
val32 = abs(valm32);
mySerial.print(" "); mySerial.println(val32);
valm32 = -234567890;
mySerial.print(valm32);
val32 = abs(valm32);
mySerial.print(" "); mySerial.println(val32);
valm32 = -12345;
mySerial.print(valm32);
val32 = abs(valm32);
mySerial.print(" "); mySerial.println(val32);
valm16 = -12345;
mySerial.print(valm16);
val16 = abs(valm16);
mySerial.print(" "); mySerial.println(val16);
}
void loop() {
// put your main code here, to run repeatedly:
}
generates the following output:
Baudrate=38400
-1234567890 722
-234567890 14546
-12345 12345
-12345 12345
Oviously the abs() function is wrong with 32bit values.