-
Notifications
You must be signed in to change notification settings - Fork 36
integer
Kyle Baron edited this page Sep 2, 2016
·
1 revision
library(mrgsolve)
library(dplyr)
library(knitr)
opts_chunk$set(comment='.')
Create an mrgsolve
model to illustrate the consequences of dividing
two integers in C++
-
int
creates integer variable -
double
creates double precision variables -
mrgsolve
parameters aredoubles
code <- '
$PARAM p = 12.0, J = 7/6
$TABLE
double d = 1.1;
int i = 5;
int ii = 3;
double A = d/i;
double B = i/ii;
double C = p/i;
double D = p/5.6;
double E = p/7;
double F = 7/6;
double G = 7.0/6.0;
double H = 7.1/5;
double I = d + 9;
$CAPTURE >> annotated=TRUE
A: double divided by integer [0.22]
B: integer divided by integer [1.666667]
C: parameter divided by integer [2.4]
D: parameter divided by double literal [2.142857]
E: parameter divided by integer literal [1.714286]
F: integer literal divided by integer literal [1.166667]
G: double literal divided by double literal [1.166667]
H: double literal divided by integer literal [1.42]
I: add double and integer literal [10.1]
J: parameter set to 7/6 [1.166667]
'
df %>%
mutate(C_result=value) %>%
kable
name | descr | R_result | C_result |
---|---|---|---|
A | double divided by integer | 0.22 | 0.220000 |
B | integer divided by integer | 1.666667 | 1.000000 |
C | parameter divided by integer | 2.4 | 2.400000 |
D | parameter divided by double literal | 2.142857 | 2.142857 |
E | parameter divided by integer literal | 1.714286 | 1.714286 |
F | integer literal divided by integer literal | 1.166667 | 1.000000 |
G | double literal divided by double literal | 1.166667 | 1.166667 |
H | double literal divided by integer literal | 1.42 | 1.420000 |
I | add double and integer literal | 10.1 | 10.100000 |
J | parameter set to 7/6 | 1.166667 | 1.166667 |
- Writing numbers in
C++
like9
or1
result ininteger
literals - Writing numbers in
C++
like9.0
or1.0
or9.333
result indouble
literals - Dividing two
integer
s (literal or not) results in aninteger
- This may not be what you are intending and the result may be
different that what you see in
R
- This may not be what you are intending and the result may be
different that what you see in
- Dividing and
integer
bydouble
ordouble
byinteger
results indouble
- In
mrgsolve
, parameter values are coded to bedouble
s - It is considered safe practice to include one decimal place when
using literal numbers that are intended to be
double
precision- For example, it is safer to write
DAY/24.0
rather thanDAY/24
- For example, it is safer to write
- Expressions entered in
$PARAM
always get evaluated by theR
intepreter; expect theR
result