2009-12-11 5 views
8

Wie kann ich die folgende Funktion in C# implementieren?Wie kann ich die Piano Key Frequenzfunktion in C# implementieren?

alt text

+0

Ich schlage vor, Sie machen Sie sich mit System.Math.Pow - http://msdn.microsoft.com/en-us/library/system .math.pow (VS.71) .aspx - dies ermöglicht Ihnen, sowohl Exponenten als auch n-te Wurzeln zu behandeln. –

+16

Baue ein Klavier, bist du? –

+0

Wie ist das ein Klavier? Will jemand erklären pls? –

Antwort

34
double F = 440.0 * Math.Pow(2.0, (n-49.0)/12.0); 
+3

+1 für den Aufruf von Math.Pow nur einmal – ram

+0

Sie haben Recht, die Gleichung kann zu Ihrer Antwort vereinfacht werden, aber ich habe eine direkte Implementierung durchgeführt. –

13
440 * Math.Pow(Math.Pow(2, 1.0/12), n - 49) 
+0

+1, strikt nach Punkt –

2
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) 

so ....

double d = 27.5 * Math.Pow(2, (n-1)/12.0) 

Und da 12. Wurzel aus 2 = 1.0594630943592952645618252949463, dann

double d = 27.5 * Math.Pow(1.0594630943592952645618252949463, (n-1)) 

so ...

double d = 27.5 * Math.Pow(1.059463094359295, (n-1)); 
+0

Ich hoffe, dass, wenn diese Lösung verwendet wird, ein Kommentar für die Wartbarkeit gestellt wird. –

+0

Sind Sie sicher, dass Mathe richtig ist? Versuchen Sie n = 49. Sie sollten 440 bekommen. –

+0

guten Fang 12. Wurzel von 2 = 1.0594630943592952645618252949463, nicht. 083333333333333 ... Ich lief Windows calc schlecht ... Ich habe bearbeitet, um zu korrigieren. –

Verwandte Themen