Knowledge Base
cancel
Showing results for 
Search instead for 
Did you mean: 

Bug in conversion of real numbers to integers in Menta Expression Blocks

Issue

Bug in conversion of real numbers to integers in Menta Expression Blocks

Environment

TAC Xenta 280/300/401 with system program version up to version 3.41

Cause

A bug exists that causes real numbers to be improperly converted to integers in Expression Blocks. The issue is that some functions that return a real result (e.g. +-*/ and exponentiation) will sometimes return a value slightly less than expected.

For example, 2**5, which is 2 to the fifth power, should return 32. Instead, 31.9999999999 is returned. In an expression that then then converts this to an integer (e.g. "A&(2**5)"), the result gets truncated to 31 instead of the expected 32. In the example "A&(2**5)", A will then be bitwise AND-ed with binary 01111 instead of 10000.

Unfortunately, this bug is only seen when running the code live on a controller. In offline simulation mode, 2**5 returns the correct value of 32, which only makes the bug more difficult to diagnose. Oddly, The XPI block and the INT() function convert results to integers differently. An XPI block with expression "2**5" will return 32. However, and XPI block with expression "INT(2**5)" will return 31. In some cases (e.g. 19**3) both the XPI block and the INT() function return the incorrectly truncated value.

This behavior is corrected from version 3.50 of TAC Xenta 280/300/401

Resolution

The work-around is to never use operations that return real values in an expression that also does operations that convert the operands to integers (such as bitwise operations).

This behavior is corrected from version 3.50 of TAC Xenta 280/300/401

Tags (1)
Labels (1)
Version history
Revision #:
1 of 1
Last update:
‎2018-09-06 02:28 PM
Updated by: