您好,在调用此代码(Octave)后,我得到了 7 位精度的答案,我只需要 6 位。值得一提的是,在不同的数据集上,输出是正常的(6 位);
output_precision(6);
Prev
Run Code Online (Sandbox Code Playgroud)
输出:
Prev =
0.1855318
0.2181108
0.1796457
Run Code Online (Sandbox Code Playgroud)
小智 6
我知道这有点晚了,但我想为将来有同样问题的人添加答案。
根据 的函数参考output_precision(),传递给函数的参数(在本例中为 6)指定有效数字的最小数量,这仅保证将来的数字输出不会少于该有效数字数量。
从我所看到的,如果您output_precision(new_val)在显示数组之前使用(例如,Prev在问题中),则八度音程将舍入小数点前位数最少的元素以具有new_val有效数字,然后所有其他元素将舍入为具有小数点后的位数与初始舍入结果相同。如果使用语句输出单个值而不是数组,则输出将四舍五入为new_val有效数字。但是,我不知道这种行为是否得到保证。
这是我的意思的一个简短示例:
% array defined with values having 5 digits after decimal
F = [401.51670 313.70753 -88.55225 188.50067 280.21988 354.51821 54.51821 350];
output_precision(4)
F
output_precision(6)
F
Run Code Online (Sandbox Code Playgroud)
输出:
F =
401.52 313.71 -88.55 188.50 280.22 354.52 54.52 350.00
F =
401.5167 313.7075 -88.5523 188.5007 280.2199 354.5182 54.5182 350.0000
Run Code Online (Sandbox Code Playgroud)
如果您尝试对值进行过多舍入,可能会有点奇怪。当我使用output_precision(3)并输出 F 时,数字实际上是四舍五入的,就好像我的系统的默认精度 5 仍然处于活动状态一样。但是,当我使用小数点后仅 2 或 3 位数字的元素来定义另一个数组时,它按预期显示output_precision(3)。
如果您需要八度功能的文档,请查看Octave Forge。它并不完美,但它很重要。希望这有帮助。