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")))) 
> > 
> 
> 
> 

Reply via email to