Possible bug in modulo implementation? Example - 100% reproducible
1) Defining a value and calling mod() function yields correct result.
--> number = 7
number = 7
--> typeof(number)
ans = double
--> mod(number, 2)
ans = 1
2) Casting the value to unsigned and calling mod() function gives 0 as result.
--> number = uint8(number)
number = 7
--> typeof(number)
ans = uint8
--> mod(number, 2)
ans = 0
--> number = uint16(number)
number = 7
--> typeof(number)
ans = uint16
--> mod(number, 2)
ans = 0
--> number = uint32(number)
number = 7
--> typeof(number)
ans = uint32
--> mod(number, 2)
ans = 0
3) Casting the value to signed and calling mod() function gives negative result.
--> number = int8(number)
number = 7
--> typeof(number)
ans = int8
--> mod(number, 2)
ans = -1
--> number = int16(number)
number = 7
--> typeof(number)
ans = int16
--> mod(number, 2)
ans = -1
--> number = int32(number)
number = 7
--> typeof(number)
ans = int32
--> mod(number, 2)
ans = -1
4) Casting the value back to double and calling mod() yields correct result again.
--> number = double(number)
number = 7
--> typeof(number)
ans = double
--> mod(number, 2)
ans = 1
Same test in Matlab with mod() working like expected:
--> number = 7
number = 7
--> class(number)
ans = double
--> mod(number,2)
ans = 1
--> number = uint8(number)
number = 7
--> class(number)
ans = uint8
--> mod(number,2)
ans = 1
--> number = uint16(number)
number = 7
--> class(number)
ans = uint16
--> mod(number,2)
ans = 1
--> number = uint32(number)
number = 7
--> class(number)
ans = uint32
--> mod(number,2)
ans = 1
--> number = int8(number)
number = 7
--> class(number)
ans = int8
--> mod(number,2)
ans = 1
--> number = int16(number)
number = 7
--> class(number)
ans = int16
--> mod(number,2)
ans = 1
--> number = int32(number)
number = 7
--> class(number)
ans = int32
--> mod(number,2)
ans = 1
--> number = double(number)
number = 7
--> class(number)
ans = double
--> mod(number,2)
ans = 1
Last edit: r.f. 2014-04-16