---
# System prepended metadata

title: 問題統整
tags: [math, ' number theory']

---

---
title: 問題統整
tags: math, number theory
---


## (1) using item's modifiers to get attribute

### 為什麼要用此方法
使用item來處理的話會有很多好處，
包含可以直接使用datapack下提供的item_modifiers來快速

例如使用此json檔直接取得stack中末兩位的數值放入物品的attribute中，用於計算其加法
```json=
[
  {
    "function": "minecraft:set_attributes",
    "modifiers": [
      {
        "attribute": "minecraft:generic.movement_speed",
        "name": "add",
        "amount": 0,
        "operation": "addition",
        "slot": "feet"
      },
      {
        "attribute": "minecraft:generic.movement_speed",
        "name": "add",
        "amount": 0,
        "operation": "addition",
        "slot": "feet"
      }
    ]
  },
  {
    "function": "minecraft:copy_nbt",
    "source": {
      "type": "minecraft:storage",
      "source": "minecraft:calc"
    },
    "ops": [
      {
        "source": "stack[-2]",
        "target": "AttributeModifiers[0].Amount",
        "op": "replace"
      },
      {
        "source": "stack[-1]",
        "target": "AttributeModifiers[1].Amount",
        "op": "replace"
      }
    ]
  }
]

```


### 問題點
修改實體身上的物品之AttributeModifiers標籤，並不能使attribute的變化立刻生效，必須等待1-tick完成變更

### 替代解法
保留使用item_modifiers的方式來產生需要的modifiers，
最後在合併的時候將物品裡的AttributeModifiers合併至實體的Modifiers下，
在合併過程會自動去除不必要的資訊，如Slot、AttributeName等，
可以免去一些中間的繁瑣過程，如設定UUID、將數值放入Amount等。

---

## (2) Precision on transition of execute command

### 問題點
execute指令的接收資料使用的格式是integer，這導致非常多小數點資料在傳入的時候都會損失其精度，也因此才會衍伸出使用分離型的方式來儲存小數，不過這種方式也確實想對有限

int所能表示的值域大小是32bit，也就是2^32個數字，
而double可以表示2^53位數，這也意味著我們只能有效搬運前32位元的小數，之後的小數就不會這麼容易搬運了