Python NaN 平方误差
这只是出于好奇,想知道为什么会出现这种情况?
>>> a = float('Nan')
>>> a**2.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: (33, 'Domain error')
我本以为它应该直接返回NaN,而不是产生一个错误。
4 个回答
1
在Vista SP2系统上,使用的是2.1 GHz的英特尔双核处理器。
这是CPython的结果:
In []: sys.version
Out[]: '2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]'
In []: float('NaN')** 2.
Out[]: nan
>>> sys.version
'3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)]'
>>> float('NaN')** 2.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: (33, 'Domain error')
虽然使用的是同一个编译器,但不同的版本却得到了不同的结果。
接下来是来自另一个世界的IronPython:
>>> sys.version
'2.6.1 ()'
>>> float('NaN')** 2.
nan
>>> sys.version
'2.7.0 (IronPython 2.7 Beta 1 (2.7.0.10) on .NET 4.0.30319.1)'
>>> float('NaN')** 2.
nan
4
看起来你使用的Python版本有个小问题。在我测试的所有Python版本中,从2.5到3.1,都是正常工作的。
>>> nan = float('NaN')
>>> nan ** 2.0
nan
4
根据这个链接,看起来这个问题只出现在Windows系统上,原因是编译器处理浮点数的方式不同。
- 有没有一些无法重现这个问题的人能分享一下他们的操作系统是什么?
- 有没有在Windows上安装了2.x版本的人可以试一下(我在Windows 7 32位上使用3.1.3版本时也遇到了同样的错误)?
- @OP:你是在使用Windows,对吧?
示例
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> float('NaN')
nan
>>> _**2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: (33, 'Domain error')