[英]Different outcome calculating MD5 hash in Javascript and C++
我試圖在 Javascript 和 C++ 中計算某個值的 MD5 哈希,但不同的編程語言有時會給出不同的輸出。 由於它不會經常發生,我猜它與舍入誤差有關。
在 Javascript 中,我計算的值如下:
let calculatedTotal = 0;
blocks.forEach((block) => {
calculatedTotal += Math.floor(block.standard_deviation * 1000);
});
在 C++ 中使用 RapidJson 我正在做:
for (rapidjson::Value::ConstValueIterator j = blocks.Begin(); j != blocks.End(); ++j) {
float val = (*j)["standard_deviation"].GetFloat();
sumToCalculteHashOver += int(std::floor(val * 1000));
}
如 C++ 所示,我使用的是浮點數。
有誰知道這可能是什么原因?
感謝@Caramiriel,我設法解決了這個問題。
正如我所料,這個問題與 C++ 中浮點數的精度有關。
在我的計算中使用整數值有效。 對我來說,這意味着我需要做出這些改變。
Javascript:
let calculatedTotal = 0;
blocks.forEach((block) => {
calculatedTotal += Math.floor(block.standard_deviation) * 1000;
});
C++:
for (rapidjson::Value::ConstValueIterator j = blocks.Begin(); j != blocks.End(); ++j) {
int val = int(std::floor((*j)["standard_deviation"].GetFloat()));
sumToCalculteHashOver += int(std::floor(val * 1000));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.