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

Reply via email to