如何在C#中实现以下功能?如何在C#中实现钢琴键频率功能?
回答
double F = 440.0 * Math.Pow(2.0, (n-49.0)/12.0);
+1,仅用于调用Math.Pow一次 – ram 2009-12-11 23:44:03
你是对的,方程可以简化为你的答案,但我做了一个直接的实现。 – 2009-12-11 23:44:53
440 * Math.Pow(Math.Pow(2, 1.0/12), n - 49)
+1,严格指向 – 2009-12-11 23:39:48
440 * 12th root of 2 raised to n-49
= 440 * (2^1/12) ^(n-49)
= 440 * 2^(n/12)/2^(49/12)
= 440 * 2^(n/12)/(2^4 * 2^1/12)
= 440 * (1/2^4) * 2^((n-1) /12)
= 8 * 55 * (1/16) * 2^((n-1) /12)
= 27.5 * 2^((n-1) /12)
所以....
double d = 27.5 * Math.Pow(2, (n-1)/12.0)
而且,由于2 = 1.0594630943592952645618252949463 12根, 然后
double d = 27.5 * Math.Pow(1.0594630943592952645618252949463, (n-1))
所以......
double d = 27.5 * Math.Pow(1.059463094359295, (n-1));
我希望如果使用这个解决方案,就可维护性发表评论。 – 2009-12-12 03:06:39
你确定数学是正确的?尝试n = 49.你应该得到440. – 2009-12-12 05:27:56
良好的抓住12的根2 = 1.0594630943592952645618252949463,而不是.083333333333333 ...我跑了Windows calc严重...我编辑纠正。 – 2009-12-12 16:11:52
http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=339638&av=501750
string funcion= "440*((2)^(1/12))^(X-49)";
X=4
double FX= GetValueFunc(4);
;) jeje
我建议你熟悉System.Math.Pow - http://msdn.microsoft.com/en-us/library/system .math.pow(VS.71).aspx - 这将允许你处理指数和第n根。 – 2009-12-11 23:37:10
制造一架钢琴,是吗? – 2009-12-12 00:25:19
这是一架钢琴吗?任何人都在意解释吗? – 2009-12-14 22:54:48