圆形功能关闭1 - C.

时间:2018-02-10 08:02:40

标签: c cs50

Axon Framework

输出即将来临 - 830

需要输出 - 831

我知道我使用圆函数有问题,但我不知道我做错了什么。 有人可以帮帮我吗?

2 个答案:

答案 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声明为floatdouble,并仅对最终结果进行舍入。然后,最后一次计算将生成830.609,其向上舍入为831