How would one go about benchmarking a set of implementations like those?
On Sunday, April 13, 2014 3:22:58 PM UTC-7, Stefan Karpinski wrote: > > Please don't do this – or if you do and your program is amazingly slow, > then consider yourself warned. You can define a custom formatting function > pretty easily: > > julia> fmt = "%8.1e" > "%8.1e" > > julia> @eval dofmt(x) = @sprintf($fmt, x) > dofmt (generic function with 1 method) > > julia> dofmt(1) > " 1.0e+00" > > julia> dofmt(123.456) > " 1.2e+02" > > > The difference is that you compile the function definition with eval > *once* and then call it many times, rather than calling eval every time you > want to print something. > > > On Sun, Apr 13, 2014 at 6:17 PM, Mike Innes <[email protected]<javascript:> > > wrote: > >> It occurs to me that, if you really need this, you can define >> >> sprintf(args...) = eval(:@sprintf($(args...))) >> >> It's not pretty or ideal in terms of performance, but it will do the job. >> >> fmt = "%8.1e" >> sprintf(fmt, 3.141) #=> " 3.1e+00" >> >> On Sunday, 13 April 2014 22:47:12 UTC+1, Dominique Orban wrote: >>> >>> So what's the preferred Julia syntax to achieve what I meant here: >>> >>> julia> fmt = "%8.1e"; >>> julia> @sprintf(fmt, 3.1415) >>> ERROR: first or second argument must be a format string >>> >>> >>> >>> On Sunday, April 13, 2014 1:31:57 PM UTC-7, John Myles White wrote: >>>> >>>> As far as the macro is concerned, the splat isn’t executed: it’s just >>>> additional syntax that gets taken in as a whole expression. >>>> >>>> The contrast between how a function with splatting works and how a >>>> macro with splatting works might be helpful: >>>> >>>> julia> function splat(a, b...) >>>> println(a) >>>> println(b) >>>> return >>>> end >>>> splat (generic function with 2 methods) >>>> >>>> julia> splat(1, 2, 3) >>>> 1 >>>> (2,3) >>>> >>>> julia> splat(1, [2, 3]...) >>>> 1 >>>> (2,3) >>>> >>>> julia> macro splat(a, b...) >>>> println(a) >>>> println(b) >>>> :() >>>> end >>>> >>>> julia> @splat(1, 2, 3) >>>> 1 >>>> (2,3) >>>> () >>>> >>>> julia> @splat(1, [2, 3]...) >>>> 1 >>>> (:([2,3]...),) >>>> () >>>> >>>> >>>> — John >>>> >>>> On Apr 13, 2014, at 1:20 PM, Jeff Waller <[email protected]> wrote: >>>> >>>> > Likewise I am having problems with @sprintf >>>> > >>>> > Is this because @sprinf is macro? The shorthand of expanding a >>>> printf with format the contents of an array is desirable. I would have >>>> expected the ... operator to take an array of length 2 and turn it into 2 >>>> arguments. >>>> > >>>> > julia> X=[1 2] >>>> > 1x2 Array{Int64,2}: >>>> > 1 2 >>>> > >>>> > julia> @sprintf("%d%d",1,2) >>>> > "12" >>>> > >>>> > julia> @sprintf("%d%d",X...) >>>> > ERROR: @sprintf: wrong number of arguments >>>> > >>>> > julia> @sprintf("%d%d",(1,2)...) >>>> > ERROR: @sprintf: wrong number of arguments >>>> > >>>> > julia> @sprintf("%d",X...) >>>> > ERROR: error compiling anonymous: unsupported or misplaced >>>> expression ... in function anonymous >>>> > in sprint at io.jl:460 >>>> > in sprint at io.jl:464 >>>> > >>>> > julia> macroexpand(quote @sprintf("%d%d",X...) end) >>>> > :($(Expr(:error, ErrorException("@sprintf: wrong number of >>>> arguments")))) >>>> > >>>> >>>> >
