Smojo has two kinds of numbers, integers and reals. Integers represent whole numbers, including negative numbers. Reals represent both whole and fractional numbers.
For performance reasons, Smojo has a separate version of arithmetic words for integers and reals:
+ - * / =
Used to operate between integers only. If a real number is encountered, it is truncated -- fractional part is discarded. For example, |
1 2 +will give 3 as expected, but
1 2.8 +will also give 3, since 2.8 is truncated. The equal sign is used to test if two integers on the stack are equal.
+. -. *. /. =.
As above, but these can operate on real numbers. No truncation is performed.
> >= < <=
Inequality tests. These work on both integers and reals. The result is a boolean (TRUE/FALSE) on the stack.
1 2.2 < .displays
2 3 / . 0 ok 2 3 /. . 0.6666666666666666 ok 1 0.1 / ERROR: / by zero 1 2.1 / . 0 ok 2.9 1 / . 2 ok 1 2 = . false ok
Do you understand the examples above? Can you explain why the program:
1 2.1 / .results in 0 being displayed as the answer rather than 0.4761904762, which is what you would have expected with a calculator? What changes would you make to obtain the desired answer?
1 2.1 / . 0 ok 1 2.1 /. . 0.47619047619047616 okWhen using
/, 2.1 is truncated into 2. The result 0.5 is also truncated, thus 0 is displayed.
/., no truncation is preformed.