Noticed this when playing around with the new f.(x) syntax, which I assumed 
would work like map.

julia> map(sin, 3)
0.1411200080598672

julia> map(sin, [3])
1-element Array{Float64,1}:
 0.14112

Map works like I'm used to: number goes to number, array goes to array.

julia> sin.(3)  # same as broadcast(sin, 3)
ERROR: InexactError()
 in fill!(::Array{Int64,0}, ::Float64) at ./array.jl:155
 in (::Base.Broadcast.#_F_#5)(::Array{Int64,0}, ::Int64) at 
./broadcast.jl:95
 in broadcast!(::Function, ::Array{Int64,0}, ::Int64) at ./broadcast.jl:213
 in broadcast(::Function, ::Int64) at ./broadcast.jl:220
 in broadcast(::Function, ::Int64) at ./deprecated.jl:1130
 in eval(::Module, ::Any) at ./boot.jl:225
 in macro expansion at ./REPL.jl:92 [inlined]
 in (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:46

julia> sin.([3])  # same as broadcast(sin, [3])
ERROR: InexactError()
 in macro expansion at ./broadcast.jl:95 [inlined]
 in macro expansion at ./cartesian.jl:64 [inlined]
 in (::Base.Broadcast.#_F_#6)(::Array{Int64,1}, ::Array{Int64,1}) at 
./broadcast.jl:90
 in broadcast!(::Function, ::Array{Int64,1}, ::Array{Int64,1}) at 
./broadcast.jl:213
 in broadcast(::Function, ::Array{Int64,1}) at ./broadcast.jl:220
 in eval(::Module, ::Any) at ./boot.jl:225
 in macro expansion at ./REPL.jl:92 [inlined]
 in (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:46

Broadcast doesn't like integers in sin for some reason

julia> sin.(3.)  # same as broadcast(sin, 3.)
0-dimensional Array{Float64,0}:
0.14112

julia> sin.([3.])  # same as broadcast(sin, [3.])
1-element Array{Float64,1}:
 0.14112

And it produces a 0D array when called on a Number. So broadcast works 
differently from map. 

Is the error when called on an Int a bug, given that sin(3) is obviously 
fine? And should calling it on a Number yield a Number or a 0D array? 

Reply via email to