-
Notifications
You must be signed in to change notification settings - Fork 35
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++
-
intcreates integer variable -
doublecreates double precision variables -
mrgsolveparameters 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++like9or1result inintegerliterals - Writing numbers in
C++like9.0or1.0or9.333result indoubleliterals - Dividing two
integers (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
integerbydoubleordoublebyintegerresults indouble - In
mrgsolve, parameter values are coded to bedoubles - It is considered safe practice to include one decimal place when
using literal numbers that are intended to be
doubleprecision- For example, it is safer to write
DAY/24.0rather thanDAY/24
- For example, it is safer to write
- Expressions entered in
$PARAMalways get evaluated by theRintepreter; expect theRresult