我有一个任务要用玛丽模拟器来计算一个圆的面积需要它的半径。
我知道在玛丽语言中没有乘法运算符,所以我们通过多次加数来使用乘法,所以如果我想乘2*3,我可以像3+3或2+2+2那样把它写下来
但是当使用一个圆圈的面积时,它是π,是3.14,我无法想象我怎么能得到它,所以有人能给我算法或者代码吗?
提前谢谢。
发布于 2020-12-20 01:28:46
玛丽没有浮点支持。
所以,应该参考你的课程工作或问你的导师该做什么,因为这是不明显的。
当然,在软件中做浮点是可能的,但它的复杂性是非同寻常的,所以不太可能是人们正在寻找的东西。
您可以使用不动点算术、分数或十进制。
以下是一个合适的解决方案:将其中一个数字(有小数位)乘以一些固定的常数因子,然后做算术,然后相应地解释答案。例如,让我们使用100作为因数,所以3.14由314表示。假设r是9,所以我们可以将它平方(9x9=81),然后乘以81 x 314=25434。现在我们知道这个值太大了,所以真正的答案是254.34。(你可以选择忽略.34,或者绕过它,然后忽略. 254仍然比从9x9x3得到的243更准确。)
不动点将所有数字乘以常量(通常为2的幂,以便二进制点处于相同的位位置),. 加法相对简单,但是乘法需要通过考虑两个源都在缩放的因子来解释结果,这意味着答案是双倍的。
如果你也需要用十进制数来测量半径,例如9.5,那么你可以把9.5和3.14乘以100。那么我们需要950x950,乘以314。答案是100x100x100过大,所以1000000 x太大。使用这种方法,MARIE提供的16位将溢出,因此您需要至少使用32位算术(在16位机器上不是微不足道的)。
您可以使用两个不同的缩放因子,例如9.5 as 95和3.14 as 314。以95x95x314为例,是太大了,所以请相应地解释答案。
分数对所有数字都是分子和分母。因此,3.14可以是314/100,9.5可以是95/10,简化的157/50和19/2。要想添加,就必须找到一个公共分母,转换,然后再加上分子。要将分子和分母相乘:分子= 19x19x157,分母=2x2x50。只适合16位无符号算术,但仍有16位签名算术。
最后,二进制编码十进制更像是一种字符串格式,其中数字存储每字节一个小数点数字或每小数点(打包小数). 算法的加减法需要考虑可变长度的输入。
大整数形式也使用类似二进制编码的十进制,但组成更大的元素,而不是一位小数。
所有这些方法都需要一些思考,你想要消除的限制越多,就需要做更多的工作。所以,我建议回到你的课程,找到他们真正想要的东西。
https://stackoverflow.com/questions/65375700
复制相似问题