gpt4 book ai didi

c# - x86 与 x64 上的 Mod (%) 运算符

转载 作者:太空狗 更新时间:2023-10-29 20:37:51 25 4
gpt4 key购买 nike

我需要帮助来解决一个奇怪的错误——当我在 x86 上使用 mod (%) 运算符时一切正常,但是在 x64 上,我有时会得到 NaN 作为余数(通常发生在 Angle = 0 的情况下)。我设法在我的代码之外重现了该错误,但仅限于 Angle = double.Epsilon(在我的代码中它也发生在 Angle = 0 时)。

class Program
{
public const double M_PI = 3.14159265358979323846;
static void Main(string[] args)
{
double m_2PI = (2 * M_PI);
double m_Angle = double.Epsilon;
double mod = (m_Angle % m_2PI);
//x86 mod = 4.94065645841247E-324
//x64 mod = NaN
if (double.IsNaN(mod))
Debug.Write(mod);
}
}

问候,谢伊

最佳答案

这不是一个奇怪的错误,而是一个意料之中的错误。如果您在数字数据类型的外部范围内并尝试操作,如果这没有发生,我会感到惊讶。

一个解决方案可能是封装 mod 函数。

static double myMod(double v, double m){
if(v < m) return v;
return v % m;
}

请问,您为什么担心这种边缘情况?

关于c# - x86 与 x64 上的 Mod (%) 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com