【发布时间】:2017-05-19 16:06:05
【问题描述】:
我在 Atmel Studio 中使用 ATmega328P,我必须创建一个函数/算法,它需要一个 8 位数字并计算它的平方根。结果必须在两个寄存器中给出,一个用于整数部分,另一个用于小数部分。
我在想这个:根必须在给定的数字和 0(或 1)之间。所以我会 lsr(除以 2),它会检查它是否更大、更小或相等,然后以更高的精度重试,这样它会变得越来越精确。
问题是整数不正确,而且我不知道如何将其放入代码中,因为我是汇编新手。我也可以发布我目前所做的。
感谢您的任何建议和帮助。
【问题讨论】:
-
256 字节长的查找表如何? (嗯,更像是 512B 长,因为小数部分......它是定点数学 8:8 吗?我猜)(如果你只有 256B 的小数,整个部分可以通过一个循环简单+缓慢地完成)
-
遗憾的是,它是和分配,我必须计算它,否则这将是一个可行的选择,但感谢您的输入。
-
虽然我会在万不得已的情况下这样做,如果我没有弄清楚的话。 (您建议编写一个程序,将插入的数字与 256 个结果进行比较,如果正确则结束?)
-
这取决于您需要多少复杂性和精度。因为您可以从 0 到 15 进行蛮力以覆盖 8 位无符号数的整个范围。它可以通过二分搜索进一步优化
-
ARGH...这不是 8:8 定点,这有点...在现实世界中不可用,但适合分配。在 8:8 定点中,第二个 8 位(第二个寄存器)的数量为 1/256,即 0 = 0.00, 0x80 = 0.5, 0x29 = 0.16015625, 0xFF = 0.99609375 ... 可直接用于进一步的数学计算。您的 0x17 = 23 更适合输出,但由于它的数量为 1/100,因此会浪费位(精度较低),并且难以重用于进一步的二进制数学计算。您应该指定有问题的值是如何拆分到寄存器中的。
标签: assembly atmega atmel atmelstudio