gpt4 book ai didi

python - Python中如何进行C语言计算

转载 作者:行者123 更新时间:2023-11-28 20:52:38 29 4
gpt4 key购买 nike

我想用Python做一些C语言计算的模拟。比如unsigned short,单精度 float ……

ushort(0xffff) + 1 -> 0
0.1f * 0.1f -> ...

在 Python 中是否有一些库可以做到这一点?

我可以使用 ctypes 创建无符号短单 float ,但它们不能做数学运算:

a = c_uint16(0xffff)
b = c_uint16(0x01)
a+b -> TypeError

或者,我可以使用 numpy:

>>> np.uint16(0xffff) + np.uint16(0x01)
Warning: overflow encountered in ushort_scalars
0

但与Python的正常计算相比,它非常慢:

>>> timeit.timeit("a+b", "import numpy as np;a=np.uint16(0xfffe);b=np.uint16(0x01)")
0.35577465681618037
>>> timeit.timeit("0xfffe+0x01")
0.022638104432360251
>>> timeit.timeit("np.uint16(0xfffe) + np.uint16(0x01)", "import numpy as np")
5.904765399236851

编辑:

>>> timeit.timeit("a+b", "a=0xfffe;b=0x01")
0.040062221014295574

最佳答案

编译0xfffe+0x01时,这将被折叠到常量65535中。您不是在计算加法需要多长时间——您只是在测量加载常量的时间:

>>> dis.dis(compile("0xfffe+0x01", "", "eval"))
1 0 LOAD_CONST 2 (65535)
3 RETURN_VALUE

尽管如此,添加 NumPy 标量比添加内置整数要慢,但它不会比纯 Python 中的更好。考虑使用 Cython -- 它将允许您声明类型并以 C 速度执行计算。或者,尝试在 NumPy 中向量化您的代码(也就是说,如果速度真的很重要的话)。

关于python - Python中如何进行C语言计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366017/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com