【发布时间】:2016-07-04 04:33:44
【问题描述】:
我正在开发一个不支持浮点数学的微控制器。仅限整数数学。因此,没有 sqrt() 函数,我无法导入任何数学模块。 MCU 正在运行支持八种 Python 数据类型的 python 子集:无、整数、布尔值、字符串、函数、元组、字节列表和迭代器。另外,MCU不能做楼层划分(//)。
我的问题是我需要计算 3 个有符号整数的大小。
mag = sqrt(x**2+y**2+z**2)
FWIW,值只能在 +/-1024 范围内,我只需要一个近似值。有没有人有解决这个问题的模式?
【问题讨论】:
-
所以你需要最接近
sqrt(x**2+y**2+z**2)的int? -
“关闭”是什么意思?速度有多重要?您可以使用预先计算的常量表吗?如果可以,您可以负担多少字节的预先计算的数据? MCU 支持什么 - 整数加法?右移?整数乘法?以及什么大小的整数?
-
您真的需要幅度,还是直接使用幅度平方有效?
-
啊,好问题@o11c ...
-
它是否支持除法?地板除法运算符是最近添加的,用于区分实际除法,如果仅支持整数,则没有意义的区别。但是首先,除法通常很昂贵。使用移位、加法和乘法的逐次逼近不太可能更便宜,这反过来可能会受益于 ctz 或 clrsb 等操作以找到最重要的 1 位。我很好奇您使用的是什么类似 Python 的系统。也许是 PyMite?
标签: python math square-root