2017-08-30 28 views
3

當平方根生成一個正數時,我得到一個域錯誤。它最初出現在一個複雜的程序,但我可以簡單地重現bug爲執行以下操作:當平方根生成一個正數時,math.sqrt域錯誤

Microsoft Windows [Version 10.0.16251.1002] 
(c) 2017 Microsoft Corporation. All rights reserved. 

C:\Users\Adam>python 
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import math 
>>> math.sqrt(1.3) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
ValueError: math domain error 
>>> 

我從3.6.1版本升級到3.6.2,試圖解決這個問題,並重新啓動我的電腦,但它仍然在發生。有些數字正在工作(1.2,1.4),其他一些數字也不起作用(1.128)。

我正在使用的代碼在Ubuntu中工作,但不在Win10中,這似乎是停止工作的問題。從評論

+2

如果你想有一個變通方法,使用'1.3 **(1/2)' –

+0

歡迎SO!祝你好運 –

+0

@coldspeed真的,也許有點慢(速度是我正在研究的程序中的一個問題),但我只是很困惑,爲什麼它會發生。 – Zev

回答

1

復古:

  1. 嘗試
import ctypes 
msc = ctypes.windll.msvcrt 
msc.sqrt.restype = ctypes.c_double 
msc.sqrt.argtypes = [ctypes.c_double] 
msc.sqrt(1.3) 

(原來的問題是在MSVCRT.DLL)

  • 試sfc工具(見https://answers.microsoft.com/en-us/windows/forum/windows_10-update/downloaded-windows-10-msvcrtdll-missing-message/87d48295-2969-4f62-88cd-7d0030946099?auth=1
    • 左鍵單擊開始按鈕。
    • 右鍵單擊命令提示符(管理員)選項,它可讓您運行'以管理員身份運行'。
    • 彈出命令提示符窗口。
    • 類型:SFC/SCANNOW並按Enter鍵。