Issue 1:
I'm seeing weird behaviour on two MacBooks Pro compared with my colleague's MacBook Pro.

On my first Mac, running High Sierra 10.13.3, IPython 5.3.0, numpy 1.11.0, and Python 2.7.13, installed using Anaconda:

In [2]: P01 = np.array([-13.73046875, -10.4140625 , 18.88452148], dtype=np.float32)
In [3]: P02 = np.array([-17.63671875, 13.19140625, 18.57519531], dtype=np.float32)
In [4]: P03 = np.array([ 3.30859375, 1.1015625 , 30.3034668 ], dtype=np.float32)
In [5]: np.dot(P02, np.cross(P01,P03))
Out[5]: 0.0

On my second Mac, running High Sierra 10.13.3, IPython 5.4.1, numpy 1.13.3, and Python 2.7.14, installed using Anaconda:

In [1]: P01 = np.array([-13.73046875, -10.4140625 , 18.88452148], dtype=np.float32)
In [2]: P02 = np.array([-17.63671875, 13.19140625, 18.57519531], dtype=np.float32)
In [3]: P03 = np.array([ 3.30859375, 1.1015625 , 30.3034668 ], dtype=np.float32)
In [4]: np.dot(P02, np.cross(P01,P03))
Out[4]: 0.0

On my colleague's Mac, running High Sierra 10.13.3, IPython 5.4.1, numpy 1.13.1, and Python 2.7.13, installed not using Anaconda:

In [8]: P01 = np.array([-13.73046875, -10.4140625 , 18.88452148], dtype=np.float32)
In [9]: P02 = np.array([-17.63671875, 13.19140625, 18.57519531], dtype=np.float32)
In [10]: P03 = np.array([ 3.30859375, 1.1015625 , 30.3034668 ], dtype=np.float32)
In [12]: np.dot(P02, np.cross(P01,P03))
Out[12]: 12604.703

On my Mac, running High Sierra 10.13.3, not using IPython, numpy 1.13.1, and Python 2.7.14, installed using Anaconda:

>>> P01 = np.array([-13.73046875, -10.4140625 , 18.88452148], dtype=np.float32)
>>> P02 = np.array([-17.63671875, 13.19140625, 18.57519531], dtype=np.float32)
>>> P03 = np.array([ 3.30859375, 1.1015625 , 30.3034668 ], dtype=np.float32)
>>> np.dot(P02, np.cross(P01,P03))
12604.703

I have checked that np.__path__ and np.__config__.show() are the same in my IPython and Python interactive shells; they are. My colleague can get np.dot to work as expected (the 12604 result) on every machine he's tried. How do I go about debugging this? What might be happening?

Issue 2:
I've found a very strange bug. Under certain circumstances, a small number of the entries in the dot product of two 2D arrays will be wrong:

import numpy as np
nrow, ncol = 2, 69900
rows = np.random.normal(size=(nrow, 1)).astype(np.float32)
columns = np.random.normal(size=(1, ncol)).astype(np.float32)
np_outer = rows.dot(columns)
ind0, ind1 = 0, 69818
print(np_outer[ind0, ind1], rows[ind0, 0]*columns[0, ind1])

Most entries are fine. In this example, only columns 69818-69899 in the product are wrong.

This issue remains the same using np.matmul(rows,columns) and for different values of nrow. However it doesn't appear for an arbitrary values of ncol. There's a band of values around 69900 where errors appear, but there are none at 60000 or 70000. It's also not always the case that the last columns are the ones affected. For some values of ncol, there will be multiple bands of columns affected.

I have not seen this behavior with float64 arrays. It also disappears if you do the dot product in transposed order:

np_outer_t = columns.T.dot(rows.T).T
print(np_outer_t[ind0, ind1], rows[ind0, 0]*columns[0, ind1])

System info: numpy 1.12.1, python 3.6.1, Macbook Pro, OS 10.6.1