Hi all,

an update: I continued the development of this package, you can have a look 
at the available features here: 
https://github.com/giordano/Measurements.jl#features-list

In addition, I implemented support for correlation between variables 
<https://github.com/giordano/Measurements.jl/issues/3>, so that x - x == 
zero(x), x/x == one(x), tan(x) == sin(x)/cos(x), and so on.  This is done 
in "correlation" branch, but currently performance is less than 
suboptimal.  According to @benchmark, a simple operation like addition 
between two independent (uncorrelated) variables takes ~ 20 µs, against the 
~15 ns required by the implementation in "master" branch (without support 
for correlation).

You can see how the Measurement type is defined and constructed here: 
https://github.com/giordano/Measurements.jl/blob/1fddcc848c807d3fb96b9b724c1039359597c14d/src/Measurements.jl#L31-L57
  
In order to handle correlation between variables, I keep in each Measurement 
object a list of all independent variables from which it's derived in the 
form of a dictionary.  Here you can see how this list is used to compute 
the final uncertainty: 
https://github.com/giordano/Measurements.jl/blob/1fddcc848c807d3fb96b9b724c1039359597c14d/src/math.jl#L26-L95
  
The most relevant function is the second one, which is related to 
mathematical operations with two or more operands, so the cases where 
correlation may occur.  This is all you need to understand how all this 
works.

Do you have suggestions on how to improve the performance?  I feel that 
dictionary is a very handy type but it isn't particularly efficient in this 
case, only *creating* a Measurement object takes ~2 ns in "master" branch, 
and ~800 ns in "correlation" branch and Julia 0.4.5 (it's something less in 
Julia 0.5, but always of the order of hundreds of nanoseconds); source: 
@benchmark 
3.0 ± 1.0.  I was thinking of creating a new type for handling the list of 
derivatives of independent variables, but how this could be defined in 
order to make it efficient?

Bye,
Mosè

Reply via email to