Pavol Lisy wrote: > On 8/31/17, 20/20 Lab <l...@2020fresno.com> wrote: >> >> >> On 08/31/2017 01:53 AM, Pavol Lisy wrote: > [...] >> Valid point, fired up a windows 10 machine and worked as well. >> >> Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit >> (Intel)] on win32 >> Type "copyright", "credits" or "license()" for more information. >> >>> import math >> >>> math.sqrt(1.3) >> 1.140175425099138 >> >>> >> >> This machine does not have the creators update yet. So there's that. >> -- >> https://mail.python.org/mailman/listinfo/python-list > > Thx! :) > > Could somebody help me? > > I was trying to call sqrt using ctypes from msvcrt but I am not succesful: > > import ctypes > msc = ctypes.windll.msvcrt > > def msqrt(arg): > s = ctypes.create_string_buffer(100) > d = ctypes.c_longdouble(arg) > msc.sprintf(s, b'arg = %g', d) > print(s.value.decode()) > r = msc.sqrt(d) > msc.sprintf(s, b'sqrt = %g', r) # r is int so this format is > wrong I just like to show my intention > print(s.value.decode()) > print("r = ", r, r.__class__) > >>>> msqrt(1.3) > arg = 1.3 > sqrt = 0 > r = 0 <class 'int'> > >>>> msqrt(-1) > arg = -1 > sqrt = 4.00144e-320 # because wrong format in sprintf > r = 8099 <class 'int'> > > And -> > >>>> msc.sqrt.restype > ctypes.c_long > >>>> msc.sqrt.argtypes is None > True > > How to do it properly? Isn't ctypes broken?
I think you have to specify the types yourself: >>> import ctypes >>> libm = ctypes.cdll.LoadLibrary("libm.so") >>> libm.sqrt(42) 0 >>> libm.sqrt.argtypes = [ctypes.c_double] >>> libm.sqrt.restype = ctypes.c_double >>> libm.sqrt(42) 6.48074069840786 -- https://mail.python.org/mailman/listinfo/python-list