# Calc Basic macro integer arithmetic problem [closed]

I'm dealing with prime number fractions and have noticed that Calc Basic isn't really using integer. It's rounding if I do a divide for instance rather than truncation. It's using some sort of rounding process. I also then noticed that some integer functions are stated to return double so it looks like pure integer is never used under the hood.

I wonder if there are any compiler options to prevent the rounding or even better force true integer. Mod seems to work ok but as there is no quotient that I am aware of so I have to use divide.

I chose the integer way as the macro has to loop through 4,000 numbers and I can't check all of them. If done in pure integer all numbers have to be ok just on the basis of one being correct. Float has been known to cause problems with what I am doing.

## John

edit retag reopen merge delete

### Closed for the following reason the question is answered, right answer was accepted by Alex Kemp close date 2020-10-29 16:56:48.899029

Well I didn't expect an answer but feel the lack of true integer variables is disgusting.

( 2016-06-11 17:13:21 +0200 )edit
1

As opposed to the spreadsheet cells where any numerical value is IEEE Double, LibreOffice BASIC has integer types. What you may grumble about is that integer arithmetic isn't supported to the degree you would like. Btw: the operator @hasklo mentioned should be equivalent to Quotient(Numerator, Denominator).
Generally machine arithmetic does not support unlimited precision for integer numbers. If you need it, you have to resort to mathematical software. Try the free 'Maxima' e.g.

( 2018-02-08 12:15:35 +0200 )edit

Sort by » oldest newest most voted

I know it's been really long since you asked this question... but maybe this can help someone with similar question.

Basically, the "/" operator returns double. If you set it to an integer, it gets rounded as you have found. There is another operator specifically for integer division: "\" (from left to right slash), which will truncate the result.

dim iMe as Integer
iMe = 3\4    ' --> iMe is 0

more