类似的问题C# 中的 Math.Atan2 或类实例问题 https://stackoverflow.com/questions/1957801/math-atan2-or-class-instance-problem-in-c
and
将两个双精度数相加给出错误结果 https://stackoverflow.com/questions/1193630/add-two-double-given-wrong-result
这是简单的几行:
public static String DegreeToRadianStr(Double degree)
{
Double piBy180 = (Math.PI / 180);
Double Val = (piBy180 * degree); // Here it is giving wrong value
}
piBy180 * 度数 = -3.1415926535897931
但瓦尔 = -3.1415927410125732
替代文本 http://www.imagechicken.com/uploads/1262936639009840000.jpg http://www.imagechicken.com/uploads/1262936639009840000.jpg我真的不知道该怎么办..
请提出一些与此相关的问题,以便我可以指出哪里出了问题。
令人惊奇的是 piBy180 保持正确的值。
其他函数也发生同样的事情,但是我如何操作以获得正确的值。
我正在使用 MS Visual Studio 的 C#.net SP1。
如果您告诉我们的价值将会有所帮助degree
然后我们可以尝试重现该问题......
三件事:
- 您应该预料到浮点运算会出现一定量的错误。我不会期望这么多,但也不会期望看到确切的值。
- 字符串转换通常不会显示确切的值。我有一个文件——双转换器.cs http://pobox.com/~skeet/csharp/DoubleConverter.cs- 与一个
ToExactString
可以帮助诊断此类事情的方法。
- 您的应用程序使用 DirectX 吗?即使代码中有双精度数,这也可以更改处理器模式以有效地使用 32 位算术。在我看来,这似乎是问题最有可能的原因,但这仍然只是一个猜测。
编辑:好的,听起来我猜对了,DirectX 可能就是原因。你可以通过CreateFlags.FpuPreserve http://msdn.microsoft.com/en-us/library/ms859062.aspx to the Device构造函数 http://msdn.microsoft.com/en-us/library/bb324029(VS.85).aspx以避免它这样做。诚然,这会降低 DirectX 的性能,但这是您需要自己考虑的权衡。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)