0

我的任务是使用 Marie Simulator 计算需要半径的圆的面积

我知道在玛丽语言中没有乘法运算符,所以我们通过多次相加来使用乘法,所以如果我想乘以 2*3,我可以把它写成 3+3 或 2+2+2

但是当使用圆的面积时,pi 是 3.14 我无法想象我怎么能得到它所以任何人都可以给我算法或代码吗?

提前致谢。

4

1 回答 1

0

MARIE 不支持浮点。

所以,应该参考你的课程作业或询问你的导师该怎么做,因为这并不明显。

当然,可以在软件中进行浮点运算,但复杂性非常高,因此不太可能是他们想要的。

您可以使用定点算术、分数或小数。

这是一种可能合适的解决方案:将其中一个数字(有小数位)乘以某个固定的常数因子,进行算术运算,然后相应地解释答案。例如,让我们使用 100 作为因子,所以 3.14 用 314 表示。假设r是 9,所以我们可以将其平方 (9x9=81),然后乘以 81 x 314 = 25434。现在我们知道该值太大了 100x ,所以真正的答案是 254.34。(您可以选择忽略 .34,或者将其舍入,然后忽略。254 仍然比我们从 9x9x3 得到的 243 更准确。)

定点将所有数字乘以常数(通常是 2 的幂,因此二进制点位于相同的位位置)。加法相对简单,但乘法需要通过考虑(或排除)两个源都按比例缩放来解释结果,这意味着答案是双重缩放的。

如果您还需要用十进制数字测量半径,例如 9.5,那么您可以将 9.5 和 3.14 都缩放 100。然后我们需要 950x950,然后乘以 314。答案将是 100x100x100 太大,所以 1000000x 太大了。使用这种方法,MARIE 提供的 16 位将溢出,因此您至少需要使用 32 位算术(在 16 位机器上不是微不足道的)。

您可以使用两种不同的缩放因子,例如 9.5 作为 95 和 3.14 作为 314。以 95x95x314 为例,10000x 太大了,因此请相应地解释答案。这仍然会溢出 MARIE 的 16 位

分数将保持所有数字的分子和分母。因此,3.14 可能是 314/100,而 9.5 可能是 95/10——简化后的 157/50 和 19/2。要添加,您必须找到一个公分母,转换,然后求和分子。乘以分子和分母:分子 = 19x19x157,分母 = 2x2x50。只适合 16 位无符号算术,但仍会溢出 16 位有符号算术。

最后,二进制编码的十进制更像是一种字符串格式,其中每个字节或每个半字节(压缩十进制)存储一个十进制数字。加法和减法算法需要考虑可变长度输入。

大整数形式也使用类似于二进制编码的十进制,但组成更大的元素而不是单个十进制数字。

所有这些方法都需要一些思考,并且您想要消除的限制越多,所需的工作就越多。所以,我建议回到你的课程去寻找他们真正想要的东西。

于 2020-12-20T01:28:46.147 回答