【问题标题】:Marie Simulator Multiplication of fractions玛丽模拟器分数乘法
【发布时间】:2020-12-20 00:04:12
【问题描述】:

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

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

但是当使用圆的面积时,圆周率是 3.14,我无法想象我怎么能得到它,所以谁能给我算法或代码?

提前致谢。

【问题讨论】:

    标签: marie


    【解决方案1】:

    MARIE 不支持浮点数。

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

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

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

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

    Fixed point 将所有数字乘以常数(通常是 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 位有符号算术..

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

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

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

    【讨论】:

    • 尊敬的 Erik 先生,首先,我非常感谢您详细的回答,它阐明了很多事情。其次,如果您的时间允许,请告诉我 MARIE 可以像我想添加 0.50 + 0.50 那样简单地接受浮点数,它的代码会是什么样子?提前致谢
    • 没有明确支持浮点,只有整数。您将不得不使用整数功能来模拟更复杂的东西;我上面提到的一种方法,或者其他方法,甚至。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多