计算x除以x2时的最大舍入差
本文关键字:舍入 除以 x2 计算 | 更新日期: 2023-09-27 18:05:20
这可能是1/2数学,1/2编程的问题。但我们开始吧。
我有一个随机的2位小数。我要把这个除以一个随机整数。那么我想知道可能的最大舍入差。
的例子:
decimal number = 100.00M;
int x = 3;
var result = number/x;
var roundedResult = Round(result, 2, MidpointRoundingEx.AwayFromZero);
// roundedResult = 33.33
var roundingDiff = number - (roundedResult * x);
// roundingDiff = 0.01
在这个例子中,舍入差是0.01。
但是'number'可以是任何有两个小数的数,'x'可以是任何整数。所以我想知道是否有可能提出一个公式,这样我就可以知道在任何情况下最大的四舍五入差。
谢谢托马斯。
好的,你想要数学-让我们做有趣的!
假设d是一个随机的有两位小数的十进制数。
我们可以很容易地说
100d = n * x + r,
where 100d, n, x, r are integers, and 0 <= r < x
d / x = n / 100 + r / 100x
从舍入的角度来看,这里的n/100总是"好"的,所以我们对"r/x"部分很感兴趣,因为它是唯一影响舍入的部分:
0 <= r / x < 1,
0 <= r / 100x < 0.01
如果r/100x>= 0.005,它在四舍五入的结果上加0.01。也就是r/x>= 1/2,也就是r>= x/2
那么(d/x)舍入等于
(1) n / 100, when r < x / 2, or
(2) n / 100 + 0.01, when r >= x / 2
舍入差为
diff = d - (n / 100) * x for (1), or
diff = d - (n / 100) * x + 0.01 * x for (2)
截至
(n / 100) * x = d - r/100
我们有(2)的最大diff:
max diff = r / 100 + 0.01 * x = (r + x) / 100
但是我们知道
x / 2 <= r < x,
所以最大diff将为最大r: (*)
max diff = 2 * x * 0.01 = x / 200
如你所见,我们仍然依赖于特定的x,所以我们需要对它做一些估计。如果它是完全随机的-我们可以使用任何舍入差值,直到d本身。
例如我们输入x <然后是Max diff="D/200</p">
并添加编程部分:
decimal number = 100.00M;
decimal max = decimal.MinValue;
decimal min = decimal.MaxValue;
int maxX = 0;
int minX = 0;
for (int x = 1; x <= number; x++)
{
var result = number / x;
var roundedResult = Math.Round(result, 2, MidpointRounding.AwayFromZero);
var roundingDiff = number - (roundedResult * x);
if (roundingDiff < min)
{
min = roundingDiff;
minX = x;
}
if (roundingDiff > max)
{
max = roundingDiff;
maxX = x;
}
}
Console.WriteLine("Max is {0} for {1}", max, maxX);
Console.WriteLine("Min is {0} for {1}", min, minX);
Console.WriteLine("Delta is {0}", max - min);
Console.WriteLine("d / 200 = {0}", number / 200);
输出:
Max is 0.40 for 83
Min is -0.44 for 93
Delta is 0.84
d / 200 = 0.50
为什么不正好是0.5呢?因为在(*)中我们有一个隐式假设r可以是x/2对于任何x,这是不正确的,但希望这对你们来说足够了
然后是Max>您可以使用下面的一行公式计算diff:
var roundingDiff = ((int)(number * 100) % x - ((int)(number * 100) % x + x / 2) / x * x) / 100M;
对于给定的x
,最大舍入差为x / 200