我尝试将浮点数分配给multiprocessing.Value共享ctype,如下所示:
import multiprocessing
import random
test_float = multiprocessing.Value('f', 0)
i = random.randint(1,10000)/(random.randint(1,10000))
test_float.value = i
print("i: type = {}, value = {}".format(type(i), i))
print("test_float: type = {}, value = {}".format(type(test_float.value), test_float.value))
print("i == test_float: {}".format(i == test_float.value))
但是,存储在multiprocessing.Value中的float是!=输入float:
>>> i: type = <class 'float'>, value = 1.480021216407355
>>> test_float: type = <class 'float'>, value = 1.4800212383270264
>>> i == test_float: False
这是什么问题?
编辑: 找到了解决方案(请参阅答案)但是,我不明白,为什么这里的“ double”是正确的类型而不是“ float”。如果有人可以详细说明并提供解决方案,我将其标记为正确答案。
答案 0 :(得分:2)
解决方案是将typecode_or_type
中的multiprocessing.Value
设置为双精度:
test_float = multiprocessing.Value('d', 0)
允许使用multiprocessing.Value
的类型代码:
Type code C Type Python Type Minimum size in bytes 'b' signed char int 1 'B' unsigned char int 1 'u' Py_UNICODE Unicode character 2 (see note) 'h' signed short int 2 'H' unsigned short int 2 'i' signed int int 2 'I' unsigned int int 2 'l' signed long int 4 'L' unsigned long int 4 'f' float float 4 'd' double float 8
答案 1 :(得分:1)
Python浮点数为double-precision floats
,或其他语言称为double
的浮点数。这就是为什么您需要使用'd'
的原因:'f'
与python用于float
的精度级别不符