Tag: math

.NET 4中的Math.Round()行为

可能重复: 在C#中:Math.Round(2.5)的结果是2(而不是3)! 你在跟我开玩笑吗? .Net Round Bug 我有一个中间值(number.5),我需要指定如何舍入(上限值或下限值)。 我理解Math.Round与MidPointRounding参数的行为,但这并不能解决我的问题: // To Even Console.WriteLine(Math.Round(4.4)); // 4 Console.WriteLine(Math.Round(4.5)); // 4 Console.WriteLine(Math.Round(4.6)); // 5 Console.WriteLine(Math.Round(5.5)); // 6 // AwayFromZero Console.WriteLine(Math.Round(4.4)); // 4 Console.WriteLine(Math.Round(4.5)); // 5 Console.WriteLine(Math.Round(4.6)); // 5 Console.WriteLine(Math.Round(5.5)); // 6 // in one case I need Console.WriteLine(Math.Round(4.4)); // 4 Console.WriteLine(Math.Round(4.5)); // 4 Console.WriteLine(Math.Round(4.6)); // 5 Console.WriteLine(Math.Round(5.5)); // 5 […]

C#中的Atan2(或类似的lanaguge)

有人能指出我在C#中定义的Atan2的一个很好的例子(或者模糊地接近C#的东西),它不使用任何内部数学方法吗? 这是在.NET Microframework上,因此没有内部数学库这样的东西。 我已经定义了Sin()/ Cos(),但我在使用Atain2时遇到了很多麻烦。 NETMF中有一些散点图数学库,但我发现它们都有缺陷或坏了。 其中一个主要的甚至没有正确定义PI!

除以两个数字总是等于零?

在我的Xna游戏中,我试图让我的playfield缩放到它正在运行的屏幕上。 为此,我使用比例来查找真实窗口相对于我的playfield缩放的百分比。 为此,我将实际宽度除以虚拟宽度: float _percent = _realViewport.Width / this._viewport.Width; 不过,我总是在_percent变量中得到0。 我在代码中的那一行设置了一个调试停止点,并分析了变量。 this._viewport.Width等于640,而_realViewport.Width等于1280.所以,使用我的计算器,640/1280应该等于0.5,但在我的代码中我总是得到0,而不是0.5。 它为什么这样做?

如何将.Net中的System.Decimal舍入到一些重要数字中

我有一个System.Decimal数字 0.00123456789 我希望得到3位重要数字。 我预计 0.00123 行为是舍入行为而不是截断。 在.Net中是否有防弹方法可以做到这一点?

给定边界框和一条线(两个点),确定该线是否与框相交

给定一个边界框,定义如bounds.min.(x/y/z) , bounds.max.(x/y/z) ,以及3D空间中的两个点(表示为Vector3对象),如何确定是否由两点组成的线与边界框相交?

为什么Math.Exp在32位和64位之间给出不同的结果,具有相同的输入,相同的硬件

我使用.NET 2.0与PlatformTarget x64和x86。 我给Math.Exp输入相同的输入数,并且它在任一平台上都返回不同的结果。 MSDN说你不能依赖文字/解析的Double来表示平台之间的相同数字,但我认为我在下面使用Int64BitsToDouble可以避免这个问题,并保证在两个平台上输入相同的Math.Exp。 我的问题是为什么结果不同? 我原以为: 输入以相同的方式存储(双/ 64位精度) 无论处理器的位数如何,FPU都会进行相同的计算 输出以相同的方式存储 我知道我不应该比较15/17位数后的浮点数,但我对这里的不一致感到困惑,看起来在同一硬件上看起来是相同的操作。 任何人都知道引擎盖下发生了什么? double d = BitConverter.Int64BitsToDouble(-4648784593573222648L); // same as Double.Parse(“-0.0068846153846153849”) but with no concern about losing digits in conversion Debug.Assert(d.ToString(“G17”) == “-0.0068846153846153849” && BitConverter.DoubleToInt64Bits(d) == -4648784593573222648L); // true on both 32 & 64 bit double exp = Math.Exp(d); Console.WriteLine(“{0:G17} = {1}”, exp, BitConverter.DoubleToInt64Bits(exp)); // […]

将double翻转为int

我有一个来自int / int的数字(“double”)(例如10/3)。 什么是Excess逼近的最佳方法,并在C#上将其转换为int?

除以零:int与float

将int除以零将抛出exception,但浮点数不会 – 至少在Java中。 为什么浮点数有额外的NaN信息,而int类型没有?

如何检测浮点数在C#中是否有重复的十进制扩展?

我只需要知道如何在浮点数中检测重复的十进制扩展。 例: 0.123456789123456789 该数字的重复部分为123456789。 我想用C#自动化这个,有没有智能解决方案?

中缀到Postfix和一元/二元运算符

我有一段代码将中缀表达式转换为内存中的表达式树。 这很好用。 只有一个小问题。 我只是想弄清楚如何正确地使用一元运算符(正确的关联运算符)。 使用以下中缀表达式: +1 + +2 – -3 – -4 我希望RPN为: 1+2++3-4– 然而,我能找到的在线中缀后转换器都没有像我期望的那样处理这个例子。 有没有人对处理右关联运算符有明确的解释,特别是那些可以被误认为是一元运算符的二元运算符? 编辑/澄清:我想知道如何在从中缀到后缀的翻译过程中处理一元运算符。 即:识别相同的’ – ‘字符,例如作为一元而不是二元运算符,因此具有不同的优先级。 我会考虑使用状态机,或许有两个状态,但……?