diff breaks when float64 column cast to float32
#### Code Sample, a copy-pastable example if possible

```python
# x is a DataFrame
(x['time'].iloc[0], 
 x['time'].dtype, 
 np.allclose(x['time'], x['time'].astype('float32')), 
 np.allclose(x['time'].diff(), x['time'].astype('float32').diff(), equal_nan=True))
# (1490702404.462925, dtype('float64'), True, False)
```
#### Problem description

After I cast a float64 column to float32, diff exhibits strange behavior. The call results in many 0. values and some 128. values, which does not match the underlying data in any way I can understand. 

#### Expected Output

```python
# (1490702404.462925, dtype('float64'), True, True)
```
#### Output of ``pd.show_versions()``

<details>
INSTALLED VERSIONS
------------------
commit: None
python: 2.7.12.final.0
python-bits: 64
OS: Linux
OS-release: 4.4.0-66-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: None.None

pandas: 0.19.2
nose: None
pip: 9.0.1
setuptools: 34.4.1
Cython: None
numpy: 1.12.0
scipy: 0.18.1
statsmodels: None
xarray: None
IPython: 5.3.0
sphinx: None
patsy: None
dateutil: 2.6.0
pytz: 2016.10
blosc: None
bottleneck: None
tables: 3.3.0
numexpr: 2.6.2
matplotlib: 2.0.0
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml: None
bs4: None
html5lib: 0.999999999
httplib2: None
apiclient: None
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: 2.9.6
boto: None
pandas_datareader: None
</details>
