IEEE754 32位单精度在游戏中的实现

问题描述 投票:0回答:1

在目前流行的一款游戏CSGO中,有物品。每个项目都分配有一个浮点值。每个项目都有一个最小浮点数和最大浮点数,例如 0-1 或 0.06-0.80。每个浮点数都可以用 IEEE754 32 位单精度表示。游戏中有一个选项可以“交换”其中 10 件物品来创建一件新物品。当您向上交易 10 个商品时,所得商品的浮动可计算为

(avg of 10 floats)*(maxwear-of-resulting-item - minwear-of-resulting-item) + minwear-of-resulting-item

我遇到的问题是,由于 CSGO 使用 IEEE754 单精度,像

0.07777777
这样的平均值通常最终会是
0.0777777731418609619140625
。看起来您只需取上面等式的 IEEE754 值即可获得实际结果浮点数,但我有 10 个项目的组合,其中平均值为
0.0777777746
,本应为
0.0777777731418609619140625
,但最终结果为
0.077777780592441558837890625 
。这意味着 CSGO 的计算方式或顺序与我所知的不同。我已经尝试了使用 IEEE754 数字并取 10 个项目的平均值并将它们放入我能想到的上述等式中的每种组合,但我仍然无法找出适用于我抛出的 10 个项目的所有组合的函数

迄今为止我想出的最好的功能是:

function ieee32(x) {
  var float = new Float32Array(1);
  float[0] = x;
  return float[0];
}

function getFloat(arr, max, min, actual) {
    for (let i = 0; i < 10; i++) {
        arr[i] = ieee32(arr[i]);
    }
    let total = 0;
    for (let i = 0; i < 10; i++) {
        total += arr[i];
        total = ieee32(total);
    }
    console.log("JavaScript: " + ieee32((total/10)*(max-min)+min) + " Actual: " + actual + "\n\n")
}

getFloat([0.038998112082481,0.057681135833263,0.065524280071259,0.05766910687089,0.059865914285183,0.057671267539263,0.048783712089062,0.10741865634918,0.13450133800507,0.14966422319412], 1, 0, "0.07777778059244");
getFloat([0.1836509257555,0.35303607583046,0.27028855681419,0.37463894486427,0.22707445919514,0.24045088887215,0.16390900313854,0.23315590620041,0.16496440768242,0.3563985824585], 0.80, 0.06, "0.250000000000000");
getFloat([0.2002295255661,0.1854835152626,0.35854259133339,0.27182018756866,0.21729451417923,0.33144646883011,0.37027344107628,0.23222900927067,0.22164261341095,0.1786058396101], 0.80, 0.06, "0.2500000000000000");
getFloat([0.46830454468727,0.31111705303192,0.32107254862785,0.15711317956448,0.15612974762917,0.16205121576786,0.16290606558323,0.24679513275623,0.36448866128922,0.21758955717087], 0.80, 0.06, "0.250000029802322");

不幸的是,这只能给出其中两种组合的正确答案。有什么方法可以找到正确的计算顺序和/或它们如何使用 IEEE754 单精度 32 位表示?非常感谢任何建议!

javascript combinations ieee-754 ieee
1个回答
0
投票

您好,我感谢您的浮动网站。我真的很想就 CSGO 花车问题与您联系 我的 Steam 个人资料是 https://steamcommunity.com/profiles/76561199251057759/

© www.soinside.com 2019 - 2024. All rights reserved.