大家好,
来自网络开发世界。我目前正在尝试做一些 C 代码,它将 RGB 值转换为 NodeJS 可以通过 N-API 使用的 XYZ 值。我遇到的问题是关于浮动计算。以下是我的问题的解释:
根据下面的 C 代码,此代码尝试将 RGB 值转换为 XYZ 值。
char * colorType = getStringValue(env, funcParams[2], SPACELen);
// m is either the value srgb | adobeRgb
Matrix m = getEnumFromStr(colorType);
Rgb * rgb = getRGBFromJSObj(env, funcParams[0]);
xyz = generateXyzFromRgb(rgb, m);
我正在使用这个 JS 片段来调用我的库
const rgb = {
r: 255,
g: 255,
b: 255
};
const xyz = lib.getXyzFromRgb(rgb, "srgb", 10000);
expect(xyz).to.be.deep.equal({
x: 0.9504,
y: 1,
z: 1.0888
});
如果一切正常,输出应该如下所示
{
x: 0.9504,
y: 1,
z: 1.0888
}
但是我的输出是这个
{
x: 0.9502,
y: 0.9997,
z: 1.0886
}
如您所见,输出完全错误。然而,这个错误的输出只发生在我的本地机器(OSX)上,并且只有当我尝试使用 JS 片段进行转换时。
实际上,当我尝试直接通过 Xcode 使用下面的这段代码运行转换时,输出是正确的
// RGB and & m variable is outputing the same value as the conversion done by the C code above
xyz = generateXyzFromRgb(rgb, m);
此外,当我尝试通过运行 OSX 的 travis 调用 JS 代码时,以及通过 Docker 在 Ubuntu 上调用 JS 代码时,JS 代码也会输出正确的值。
它是否与硬件或我编译库的方式更相关?
先感谢您。