Tag: 精度

为什么这两个双打的简单计算不准确?

可能重复: C#(4):double减去double给出精度问题 86.25 – 86.24 = 0.01 一般来说,我认为上述陈述是对的吗? 但是,如果我输入此内容 double a = 86.24; double b = 86.25; double c = b – a; 我发现c = 0.010000000000005116 为什么是这样?

C#可以存储比双精度更精确的数据吗?

C#中的double不能满足我的需求。 我正在写一个分形程序,经过几次放大后我的精度不够了。 我有一个数据类型,可以保存比双精度更精确的浮点信息(即更多的小数位)?

浮点算法 – 双类型的模算子

所以我试图找出为什么模运算符返回如此大的exception值。 如果我有代码: double result = 1.0d % 0.1d; 它会得到0.09999999999999995的结果。 我期望值为0 注意使用除法运算符不存在此问题 – double result = 1.0d / 0.1d; 将得到10.0的结果,意味着余数应为0 。 让我说清楚:对于存在错误我并不感到惊讶,我很惊讶这个错误与游戏中的数字相比非常大 。 0.0999~ = 0.1和0.1与0.1d处于同一数量级,距离1.0d仅一个数量级。 它不像你可以将它与double.epsilon相比,或者说“如果它的<0.00001差异则相等”。 我已经在StackOverflow上阅读了这个主题,在下面的post中有 两 三个 ,其中包括。 任何人都可以建议解释为什么这个错误如此之大? 任何建议,以避免将来遇到问题(我知道我可以使用十进制,但我关心的是性能)。 编辑:我应该特别指出,我知道0.1是一个无限重复的二进制数字序列 – 这与它有什么关系吗?

C#加倍到十进制精度损失

我有一个双”138630.78380386264″ ,我想将其转换为小数,但是当我这样做时,我通过转换或使用Convert.ToDecimal()来做它,我失去了精度。 这是怎么回事? decimal和double都可以保存这个数字: double doub = double.Parse(“138630.78380386264”); decimal dec = decimal.Parse(“138630.78380386264”); string decs = dec.ToString(“F17”); string doubse =DoubleConverter.ToExactString(doub); string doubs = doub.ToString(“F17”); decimal decC = (decimal) doub; string doudeccs = decC.ToString(“F17”); decimal decConv = Convert.ToDecimal(doub); string doudecs = decConv.ToString(“F17”); 另外:如何在Double上获取ToString()以打印出与调试器显示的相同的结果? 例如138630.78380386264 ?

为什么C#System.Decimal会记住尾随零?

有没有理由C#System.Decimal会记住它输入的尾随零的数量? 请参阅以下示例: public void DoSomething() { decimal dec1 = 0.5M; decimal dec2 = 0.50M; Console.WriteLine(dec1); //Output: 0.5 Console.WriteLine(dec2); //Output: 0.50 Console.WriteLine(dec1 == dec2); //Output: True } 小数被归类为相等,但是dec2记住它是以额外的零输入的。 这是什么原因/目的?

双减双给出精度问题

我在.NET中遇到了一个精度问题,我认为这只适用于浮点数,但现在我看到double是浮点数。 double test = 278.97 – 90.46; Debug.WriteLine(test) //188.51000000000005 //correct answer is 188.51 处理这个问题的正确方法是什么? 回合? 丢掉不需要的小数位?

为什么在由parantheses分隔并且由语句分隔时,C#中的浮点精度会有所不同?

我知道浮点精度在常规情况下是如何工作的,但我偶然发现了我的C#代码中的奇怪情况。 为什么result1和result2在这里不是完全相同的浮点值? const float A; // Arbitrary value const float B; // Arbitrary value float result1 = (A*B)*dt; float result2 = (A*B); result2 *= dt; 从这个页面我认为浮动算术是左关联的,这意味着值以从左到右的方式进行评估和计算。 完整的源代码涉及XNA的Quaternions。 我不认为我的常量是什么以及VectorHelper.AddPitchRollYaw()的作用是什么。 如果我以相同的方式计算三角形俯仰/滚转/偏航角度,测试通过就好了,但是由于代码低于它不通过: X Expected: 0.275153548f But was: 0.275153786f [TestFixture] internal class QuaternionPrecisionTest { [Test] public void Test() { JoystickInput input; input.Pitch = 0.312312432f; input.Roll = 0.512312432f; input.Yaw = […]

将float转换为double丢失精度但不通过ToString

我有以下代码: float f = 0.3f; double d1 = System.Convert.ToDouble(f); double d2 = System.Convert.ToDouble(f.ToString()); 结果相当于: d1 = 0.30000001192092896; d2 = 0.3; 我很想知道为什么会这样?

C#中的任意精度小数

可能重复: C#中的大整数 C#无限有效十进制数字(任意精度)没有java 我在C#中以任意精度小数读出了这个问题? 但是我没有J#库。 我需要一个带C#的任意精度小数的库。