Kormiya
由于我的世界的历史遗留问题,计分板被普遍认为是唯一的一种运算途径。
但是这计分板有个致命的问题,那就是它的数据类型是Int,整数类型,这说明:
计分板可运算的范围十分有限(指的40多亿个还不够你用...
并且,计分板不允许你运算小数,因为数据类型为整数类型,分数只能为整数。

而最近来了灵感,自己为何不使用《属性修饰器》来精确的运算小数呢?

然而,令我绝望的是,这属性修饰器,不支持求商、求余。

并且,绝大多数的属性数值被限制在-1024到1024之间,甚至比计分板的范围还要小。
数值的问题可以通过倍率缩放来解决,例如乘以0.000000476837158203125,
可以将一个Int整数的最大值转换为大部分属性修饰器的最大值,以及
乘以,2097152,可以将属性修饰器的最大值转换为Int整数的最大值。

由于属性修饰器的数据类型足够精确,可以储存数据足够长的小数部分。
那么问题来了,使用属性修饰器时,只有三种运算模式:

分别为:增量、倍率和倍乘。

你应该如何使用加减乘,来达到除法运算?

除法运算相当于乘法运算中乘一个数的倒数,使用属性修饰器来进行倒数转换?


米店的工作间
路过,没看懂 走了

mxz_dada
按除法的计算机实现应该要用的按位或、位移操作的。如果精度要求不高可以用二分法暴力遍历一遍找到商

越界Otb
属性修饰器在游戏中是一个有限的工具,它主要用于调整数值的大小、进行增减和比例缩放等简单运算。由于属性修饰器的数据类型通常被限制在较小的范围内,并且不支持复杂的数**算如求商、求余,使用属性修饰器来实现精确的小数运算是困难的。

如果你需要进行精确的除法运算或其他复杂的数**算,属性修饰器可能并不是最佳选择。你可能需要考虑其他解决方案或者寻找游戏内的其他机制或模块来满足你的需求。
除法(除数为整数):
如果你要将属性修饰器值 x 除以整数 a,可以使用以下步骤:

将 a 转换为属性修饰器,例如,将整数 2 转换为属性修饰器 2.0。
使用倍率运算,将属性修饰器值 x 乘以 1 / a,即 x * (1 / a)。
例如,如果你想将属性修饰器值 x 除以整数 2,可以使用以下表达式:
x *= (1 / 2.0) 或简写为 x *= 0.5。

除法(除数为属性修饰器):
如果你要将属性修饰器值 x 除以属性修饰器值 y,可以使用以下步骤:

使用倍乘运算,将属性修饰器值 x 乘以 y 的倒数,即 x *= (1 / y)。
例如,如果你想将属性修饰器值 x 除以属性修饰器值 y,可以使用以下表达式:
x *= (1 / y)。
对于计分板而言,由于其数据类型为整数,运算范围有限,无法直接支持小数和精确的除法运算。如果你需要进行小数运算或处理大范围的数值,你可能需要考虑其他数据结构或算法来满足你的需求。这可能涉及使用自定义插件、扩展或其他游戏内机制来处理数值,并进行适当的转换和运算。需要注意的是,这种近似方法可能会引入一些精度误差,特别是在进行多次运算时。使用属性修饰器进行除法运算时,结果可能无法完全精确,并且会受到属性修饰器的数值范围限制。因此,这种方法仅适用于近似计算,无法保证完全准确的除法运算结果。

综上所述,使用增量、倍率和倍乘运算来近似实现除法运算可能是一种可行的方法,但请注意其精度限制和近似性质。

WeSif
确实,你的理解是正确的。在没有真正的除法操作的情况下,可以使用乘法的逆操作来进行除法运算。这就是你提到的“倒数”。

倒数是一个数的相反数,如果一个数是n,那么它的倒数就是1/n。因此,如果你想用乘法来执行除法,你可以将除数转换为它的倒数,然后用被除数乘以这个倒数。

例如,如果你想计算10除以5,你可以将5转换为它的倒数,也就是1/5,然后用10乘以1/5,得到的结果就是2,这就是你原本想得到的结果。

以下为GPT4.0关于如何实现除法运算的回答,我为你整理了一下,留下了部分具有可实现性的方法。
Minecraft的属性修饰器存在一定的限制,因此直接使用它们进行除法或求余运算可能是不可行的。然而,游戏中的其他机制或者算法可能能够帮助你实现这些运算。

以下是一些可能的解决方案:

1. **使用外部工具或插件:** 有些Minecraft的插件或MOD可以提供更复杂的数**算功能。如果你正在运行一个有权限使用这些工具的服务器,那么你可能可以使用它们来进行除法或求余运算。

2. **使用循环结构:** 在某些情况下,你可能可以使用游戏内的命令块和红石回路来构建一个循环结构,这个结构能够模拟除法或求余运算。例如,你可以创建一个回路,它在每次迭代中都从一个数值中减去一个固定的数值,直到这个数值小于0。这个过程可以模拟除法运算,而最后得到的负数就是求余运算的结果。

3. **使用近似值:** 如果你的需求允许一定程度的误差,那么你可以试图找出一个近似的结果,而不是一个精确的结果。例如,你可以通过几次连续的乘法或加法运算,来找出一个接近于真实结果的数值。

以上只是一些可能的解决方案,你可能需要根据你的具体情况和需求来选择最适合的方法。


对于上述的GPT4.0的回答,我为了整理了一下具体的实现方法,首先是使用模组进行实现:
1. Command Blocks: Minecraft 中的命令方块可以执行一系列的命令,包括一些基本的算术运算。你可以利用命令方块编写一些复杂的算术操作,如循环和条件语句。

2. ComputerCraft 或 CC:Tweaked: 这个模组为 Minecraft 添加了可编程计算机和机器人。你可以用 Lua 语言编程,执行复杂的数**算,包括浮点运算和除法。你还可以使用它的 API 来与 Minecraft 的世界进行交互。

3. OpenComputers: 这是另一个添加可编程计算机和机器人的模组,与 ComputerCraft 类似,但更加复杂和实用。你也可以使用 Lua 语言来编程。


然后是通过循环结构进行实现:

在Minecraft中,可以使用命令方块和红石信号创建循环结构。这样的循环结构可以用来执行重复的任务,包括算术运算。

下面是一个使用循环结构实现除法的基本示例。我们将使用一个简单的任务:将一个计分板中的值除以一个给定的数值。

这是大概的步骤:

1. **设置初始条件:** 首先,需要创建一个计分板来存储你的数值。例如,你可以创建一个名为"number"的计分板,并设置它的初始值为你想要除以的数。

2. **创建一个循环结构:** 使用命令方块和红石信号创建一个循环。你可以设置一个命令方块在每次红石信号激活时,就将"number"计分板的值减去你的除数。然后,将一个红石比较器连接到这个命令方块上,这样当"number"的值大于0时,比较器就会发出信号。

3. **创造一个反馈回路:** 连接一个红石信号放大器到比较器上,然后将放大器的输出信号引导回命令方块。这样,只要"number"的值大于0,就会形成一个反馈回路,使命令方块不断执行减法操作。

4. **计算结果:** 最后,你需要一个额外的计分板来记录循环执行了多少次。每次循环时,这个计分板的值都会增加1。这个计分板的最终值就是你的原始数值除以你的除数的结果。

这个方法只适用于整数除法,也就是说,结果将被舍入到最接近的整数。而且,由于Minecraft的运算限制,这个方法可能不适用于非常大的数值。但是,对于一些基本的任务,这个方法可以有效地模拟除法运算。

Don_Trueno
似乎无解。
似乎可以使用击退的机制,通过调整击退抗性将结果反映在击退距离上。

Kormiya
WeSif 发表于 2023-6-1 12:43
你说的没错,在没有真正的除法操作的情况下,可以使用乘法的逆操作来进行除法运算。这就是你提到的“倒数” ...

在没有办法执行除法时,乘以1/5,这也是运用到了除法,形成了一个无尽套环...
而在某个数值转换为二进制时,以便除法器的移位,这由于计分板的局限性,貌似也不太现实。

王予月月
有个想法,能否用计分板来模拟浮点型变量的小数点后部分,用int存储?
也可以参考“高精度除法”的小数部分处理方法,纯用String存储小数部分。
仅供参考。

晴路卡
你的灵感很蠢 不用考虑了

mxdyzmx
似乎无解,可以考虑用红石+命令方块实现除法


mxdyzmx
理论上是可行的 B站上已经有教程了 比较纯命令不好实现只能考虑结合的方式或者+mod了