# Typestability in matrix multiplication, intended behaviour or bug?

**URL:** <https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969>\
**Category:** General Usage\
**Tags:** question\
**Created:** [January 23, 2019, 9:56am UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969 "2019-01-23T09:56:48Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [January 23, 2019, 9:56am UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/1 "2019-01-23T09:56:48Z")

</div>

The first one seems intended behaviour, is the second one a bug?

```julia
julia> rand(3, 3) * [1.0, missing, missing]
3-element Array{Union{Missing, Float64},1}:
 missing
 missing
 missing

julia> rand(3, 3) * [1.0f0, missing, missing]
3-element Array{Any,1}:
 missing
 missing
 missing

```

I would expect the second one to have elements of type `Union{Missing, Float64}`.

```julia
julia> rand(3, 3) * [1.0f0, 1.0f0, 1.0f0]
3-element Array{Float64,1}:
 0.905265774575643 
 1.93440074935859  
 1.3997240853999218

```

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [January 23, 2019, 12:43pm UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/2 "2019-01-23T12:43:42Z")

</div>

Rand by default is Float64. Using Float32 gets what you want:

julia\> rand(Float32, 3, 3) \* [1.0f0, missing, missing]  
3-element Array{Union{Missing, Float32},1}:  
missing  
missing  
missing

Although I’m not sure why that results in `Any` when you multiply Float32 and Float64.

Edit: seems like any combination of two numbers and missing in an array multiplication gives any.  
julia\> [2, 3] \* [1.0 missing]  
2×2 Array{Any,2}:  
2.0 missing  
3.0 missing

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [January 23, 2019, 1:07pm UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/3 "2019-01-23T13:07:10Z")

</div>

> [@Raf](#):
>
> Edit: seems like any combination of two numbers and missing in an array multiplication gives any.  
> julia\> [2, 3] \* [1.0 missing]  
> 2×2 Array{Any,2}:  
> 2.0 missing  
> 3.0 missing

This seems odd, especially because

```julia
julia> promote_type(Union{Missing, Float32}, Union{Missing, Float64})
Union{Missing, Float64}

```

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [January 23, 2019, 1:08pm UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/4 "2019-01-23T13:08:30Z")

</div>

Especially when:

julia\> [2, 3] .\* [1.0 missing]  
2×2 Array{Union{Missing, Float64},2}:  
2.0 missing  
3.0 missing

Edit: with float not all ints!

---

<div class="post-metadata">

**Author:** ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)\
**Post date:** [January 23, 2019, 1:21pm UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/5 "2019-01-23T13:21:01Z")

</div>

The bug appears to have been fixed on master, please check with 1.1.

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [January 23, 2019, 1:25pm UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/6 "2019-01-23T13:25:17Z")

</div>

Yes, is fixed in Julia 1.1, is there going to be a fix for 1.0?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [January 23, 2019, 3:47pm UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/7 "2019-01-23T15:47:35Z")

</div>

Unlikely.

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [January 23, 2019, 5:34pm UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/8 "2019-01-23T17:34:16Z")

</div>

Isn’t 1.0 supposed to be a long term support version?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [January 24, 2019, 7:54am UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/9 "2019-01-24T07:54:13Z")

</div>

Yes, but changing return types can break someones code.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [January 24, 2019, 7:59am UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/10 "2019-01-24T07:59:39Z")

</div>

Note that there is no commitment to backporting every bug fix (see the “Long term support” part):

> [@Proposed release process and schedule](https://discourse.julialang.org/t/proposed-release-process-and-schedule/15623):
>
> Now that we’ve released Julia 1.0 and are [close to 1.0.1](https://discourse.julialang.org/t/julia-1-0-1-testing-period/15534) and have added some [new features](https://github.com/JuliaLang/julia/pulls?utf8=%E2%9C%93&q=is%3Apr+label%3Aenhancement) and [minor changes](https://github.com/JuliaLang/julia/pulls?utf8=%E2%9C%93&q=is%3Apr+label%3A%22minor+change%22) to the 1.1 development branch (i.e. master), it seems like time to talk about the future of the Julia release process. After various discussions in person, on Slack, and on this week’s triage call, it seems like there’s fairly solid consensus behind the following plan. Patch releases Patch releases increment the last digit of Julia’s version number, e.g. going from 1.0.0 to 1.0.1 curre…

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [January 24, 2019, 9:12am UTC](https://discourse.julialang.org/t/typestability-in-matrix-multiplication-intended-behaviour-or-bug/19969/11 "2019-01-24T09:12:23Z")

</div>

For my usecase, I fixed it with

```julia
y = mul!(similar(x), A, x)

```

this is not generalizable, but works for my use case.
