【发布时间】:2014-01-19 03:24:01
【问题描述】:
我想在计算中使用这个有理数而不损失 Matlab 中图片的准确性:
f = 359.0 + 16241/16250.0
我认为存储,例如 f = uint64(359.0 + 16241/16250.0) 会失去准确性,在 Matlab 中被视为 360。
我认为处理这件事的最好方法是永远不要存储价值,而是存储它的因素,例如
% f = a + b/c
a = 359
b = 16241
c = 16250
然后通过变量a、b和c进行计算,并以图片的形式给出结果。
这是保持准确性的好方法吗?
【问题讨论】:
-
你想用这个数字做什么样的计算? “图片”是什么意思?
-
与 A. Donda 相同的问题,请澄清。
-
实际上,Matlab 将这个数字“视为”
359.99944615384617918。如果计算x = 359 + 16241/16250,然后计算(x - 359) * 16250,则结果为16241.000000000411092,即x的绝对误差约为2.5e-14。你真的需要比这更好的精度吗? -
不是 C 专家,但据我所知,C 数据类型不是通用定义的,但它们的精度取决于机器架构和/或编译器。相比之下,无论机器或 Matlab 版本如何,Matlab “双”总是相同的。由于 64 位架构是当今的常态,我希望 C “双”与 Matlab “双”相同。不过,似乎有一个“long double”,它可能会提供更好的准确性,请参阅en.wikipedia.org/wiki/C_data_types#Basic_types
-
我有时会处理脑电图数据,12 位精度定点是常态,特殊放大器可能达到 16 位。这比“双精度”的 52 位 浮点 少得多,以至于这些差异并不重要。
标签: matlab computation