当前位置: 首页 > 编程语言 > C#

DualVariableHoldsFalseValueShare

时间:2023-04-10 20:32:42 C#

DualVariableHoldsFalseValue类似Math.Atan2orclassinstancequestioninC#的问题,添加两个给出错误结果的double问题很简单Lines:publicstaticStringDegreeToRadianStr(Doubledegree){双piBy180=(Math.PI/180);双Val=(piBy180*度数);//这里给出了错误的值}piBy180*degree=-3.1415926535897931但Val=-3.1415927410125732alttexthttp://www.imagechicken.com/uploads/1262936639009840000.jpg我真的不知道该怎么做..请就此提出一些问题,以便我指出我哪里出错了。令人惊讶的是,piBy180保持了正确的值。其他功能也会发生同样的事情,但有些我会操纵如何获得正确的值。我在MSVisualStudio中使用C#.netSP1。如果您告诉我们degree的值,这样我们就可以尝试重现问题,那将会有所帮助……三件事:编辑:好的,听起来我猜对了,DirectX可能是原因。您可以将CreateFlags.FpuPreserve传递给Device构造函数以避免它执行此操作。这无疑会降低DirectX的性能——但这是您需要自己考虑的权衡。这可能只是一个字符串格式问题。尝试添加这一行:Debug.Assert(Val==(piBy180*degree),"WTF?");分配后。它不应该失败,因为它们都是双精度数并且对它们的算术运算应该产生相同的二进制值。这似乎是不可能的。piBy180*degrees的值几乎正确计算,第17位有效数字小于2个单位。CPU必须执行乘法才能执行此操作,即使有人试图通过滥用DirectX调用来破坏精度,它也会以双精度正确执行。Val的值的第8位有效数字错误。Val声明为double,并为其分配微秒前计算的double值,无需进一步计算。这是发行版吗?我想知道C#是否有可能省略将最新值存储到Val中,而C++可以做到这一点。调试构建中会发生什么?这可能只是一个舍入错误,但我不能确定。查看这篇关于浮点运算的文章。它是为Fortran编写的,但它仍然有用。http://www.lahey.com/float.htm以上就是C#学习教程:double变量保持错误值的全部内容。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: