I think the question is how to time a proposed sprintf() function vs. the existing @sprintf macro.
-- John On Apr 17, 2014, at 7:27 AM, Stefan Karpinski <[email protected]> wrote: > I'm not sure what you mean, but doing things in a loop and timing it is the > normal way. The lack of usefulness of my answer may be indicative that I > don't understand the question. > > > On Wed, Apr 16, 2014 at 11:13 PM, Dominique Orban <[email protected]> > wrote: > 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]> 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")))) > > > > >
