Axon Framework
输出即将来临 - 830
需要输出 - 831
我知道我使用圆函数有问题,但我不知道我做错了什么。 有人可以帮帮我吗?
答案 0 :(得分:2)
引入一个偏移量,用于选择四舍五入变为四舍五入的边界。在拨打round()
的所有电话中都这样做,例如
approx_freq = round(offset + approx_freq * pow(2, 1.0/12));
我不确定,但我想offset
的值应为-0.5,以满足您的需求。
尝试并微调自己。
(注意,正如其他评论/答案所指出的那样,什么时候回合是一个棘手的问题。我建议在仔细检查后使用偏移量,在每种情况下需要进行舍入。)
答案 1 :(得分:1)
执行此步骤时,您正在四舍五入:
approx_freq = round(approx_freq * pow(2, 1.0/12));
确切的值为932.3275230361799
。这会将approx_freq
设置为932
。然后当你这样做:
case 'G': result = round(approx_freq / pow(2.0, 2.0/12));
break;
approx_freq / pow(2.0, 2.0/12))
是830.3176053067962
,其转向830
。
您不应该在中间步骤中进行舍入。将approx_freq
声明为float
或double
,并仅对最终结果进行舍入。然后,最后一次计算将生成830.609
,其向上舍入为831
。