Hello folks,
I am coding a sample package that performs operations on 32bit or
64bit floats using my Julia interface (using libjulia).
I wonder what is the best way to do it, I can use parameterized
signatures or more generically via a parameterized package. The latter
is not really necessary.
Here is a sample with a parameterized package:
JuliaMachineFloatFunctions(R : JuliaMachineFloat) :
Exports == Implementation where
JF32 ==> JuliaFloat32
JF64 ==> JuliaFloat64
STR ==> String
Exports ==> with
jlApplyFunction : (STR, R) -> R
++ jlApplyFunction(func,x)
jlApplyFunction : (STR, R, R) -> R
++ jlApplyFunction(func,x,y)
jlApplyFunction : (STR, R, R, R) -> R
++ jlApplyFunction(func,x,y,z)
Implementation ==> add
import from String
if R is JF64 then
jlApplyFunction(func,a) ==
jl_dbl_function_dbl(func,a)$Lisp
jlApplyFunction(func,a, b) ==
jl_dbl_function_dbl_dbl(func,a,b)$Lisp
jlApplyFunction(func,a, b, c) ==
jl_dbl_function_dbl_dbl_dbl(func,a,b,c)$Lisp
else -- R is JF32
jlApplyFunction(func,a) ==
jl_flt_function_flt(func,a)$Lisp
jlApplyFunction(func,a, b) ==
jl_flt_function_flt_flt(func,a,b)$Lisp
jlApplyFunction(func,a, b, c) ==
jl_flt_function_flt_flt_flt(func,a,b,c)$Lisp
But I can of course do not parametrize the package and use signatures like:
jlApplyFunc : (STR, JF64) -> JF64
or
jlApplyFunc : (STR, JF32) -> JF32
and in the implementation:
jlApplyFunction(func, a : JF64) ==
jl_dbl_function_dbl(func,a)$Lisp
etc.
They are replaced (inlined) by the Lisp calls for the two coding styles.
Example with the parameterized package above (Julia needs to perform
some initialization tasks at first call):
(1) -> a:=jf64(2)
(1) 2.0
Type: JuliaFloat64
Time: 4.03 (OT) = 4.03 sec
(2) -> b:=jf32(2)
(2) 2.0
Type: JuliaFloat32
Time: 0.02 (OT) = 0.02 sec
(3) -> jlApplyFunction("sqrt",a)
(3) 1.4142135623730951
Type: JuliaFloat64
Time: 0.02 (EV) = 0.03 sec
(4) -> jlApplyFunction("sqrt",b)
(4) 1.4142135
Type: JuliaFloat32
Time: 0.01 (EV) = 0.01 sec
(5) -> % pretend SEX
(5) 1.4142135f0
Type: SExpression
Time: 0 sec
Any idea of the "best" way to do this? And the advantages and/or
inconveniences of those two coding styles?
- Greg
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/fricas-devel/CAHnU2dY1HyaZ44kB_36NhBz6bjyQ1KiisExB7ecgrEDLj3Ty4w%40mail.gmail.com.