【发布时间】:2014-06-17 06:26:44
【问题描述】:
我正在尝试使用 Math.NET Numerics 对 DateTime - Value 系列进行插值。我从线性插值开始,但得到了一些看起来很不一样的结果。
运行这个测试:
public class script{
public void check_numerics()
{
var ticks = DateTime.Now.Ticks;
Console.WriteLine("Ticks: " + ticks);
var xValues = new double[] { ticks, ticks + 1000, ticks + 2000, ticks + 3000, ticks + 4000, ticks + 5000 };
var yValues = new double[] {0, 1, 2, 3, 4, 5};
var spline = Interpolate.LinearBetweenPoints(xValues, yValues);
var ticks2 = ticks;
for (int i = 0; i < 10; i++)
{
ticks2 += 500;
Console.WriteLine(spline.Interpolate(ticks2));
}
}
}
这给出:
Ticks: 635385235576843379
0.5
1
1.5
2
2.42857142857143 // this should be 2.5
3
3.5
4
4.5
5
请注意,2.4285 是相当错误的。在不同的时间(不同的刻度值),不同的值将是“错误的”。 Math.NET 中是否存在 x 值较大的“错误”,还是我期望过高?
【问题讨论】:
-
鉴于 double 只有 15 - 17 s.f.,所以它不会完全准确。并且您超出了该值,因此 double 无法准确表示您给出的值,但我认为它会比那更接近
-
谢谢@JamesBarrass,所以你不能用双精度表示当前时间——很高兴知道!
-
不是那个精度,毫秒,也许是 10 微秒。不会小很多。 IIRC 滴答声约为 100 纳秒
标签: c# linear-interpolation math.net numerics