2010-11-11 4 views
0

J'ai une fonction en C++ avec la signature suivante:Calcul d'une solution d'équation en C++

float Foo(float time, float min, float curr, float beta) 

Au sein de la fonction, je veux déterminer et retour MAX dans l'équation suivante:

time = beta + (1.0f - beta) * ((MAX - curr)/(MAX - min)) 

Pour tester les résultats, vous pouvez utiliser les arguments suivants:

Foo(0.95f, 625, 800, 0.75f) 

Il doit retourner 1500.Sur le papier, j'ai les étapes nécessaires pour déterminer MAX, mais je ne sais pas comment le faire fonctionner dans le code. Si quelqu'un peut fournir le code pour effectuer ce calcul, je serais extrêmement reconnaissant.

0.95 = 0.75 + (1 - 0.75) * ((max - 800)/(max - 625)) 
0.95 = 0.75 + 0.25 * ((max - 800)/(max - 625)) 

0.95 - 0.75 = 0.25 * ((max - 800)/(max - 625)) 
0.2 = 0.25 * ((max - 800)/(max - 625)) 

0.2/0.25 = (max - 800)/(max - 625) 
0.8 = (max - 800)/(max - 625) 

0.8 * (max - 625) = max - 800 
(0.8 * max) - (0.8 * 625) = max - 800 
(0.8 * max) - 500 = max - 800 

((0.8 * max) - max) - 500 = -800 

((0.8 * max) - max) = -800 + 500 
((0.8 * max) - max) = -300 

-0.2 * max = -300 

max = -300/-0.2 

max = 1500 
+2

Pour que cela fonctionne dans le code, recommencez, mais ne remplacez pas les variables par des nombres. Résolvez-le exactement de la même manière, et vous aurez votre réponse. (Ou utilisez un programme mathématique symbolique pour le faire pour vous.) – Cascabel

+0

Cela ressemble beaucoup à une question de travail à domicile ... donc je ne veux pas en dire trop, mais fondamentalement, vous devez réorganiser l'équation pour qu'elle soit 'Max = ...' – thecoshman

+0

Cela ressemble à "faire mes devoirs pour moi". Remplacez vos numéros avec des noms. Trouver l'expression pour 'max'. Codez-le. –

Répondre

2
time = beta + (1.0f - beta) * ((MAX - curr)/(MAX - min)) 

nous allons représentent le temps avec t, bêta avec b, c avec curr, min avec m, et MAX avec x; nous avons

t = b + (1-b)(x-c)/(x-m) 
(x-c)/(x-m) = (t-b)/(1-b) 
(x-m)(t-b) = (x-c)(1-b) 
x(t-b) - x(1-b) = m(t-b) - c(1-b) 
x(t-1) = m(t-b) - c(1-b) 
x = (m(t-b) - c(1-b))/(t-1) 

afin que votre fonction sera comme celui-ci

float Foo(float time, float min, float curr, float beta) 
{ 
    return (min*(time-beta) - curr*(1-beta))/(time-1); 
} 

Je recommande également de se abstenir d'utiliser les identifiants min et time, car ils peuvent provoquer des affrontements avec std::min et std::time

+4

S'il vous plaît ne faites pas les devoirs des gens pour eux. Ils n'en apprennent rien. En général, quand ils obtiennent leur diplôme et obtiennent un emploi, ce sera un fardeau pour leurs collègues. –

+0

@Alf: Je ne crois pas que ce soit les devoirs. Mais je peux me tromper –

+1

@Armen: la question elle-même est un cadeau mort. "Vous pouvez utiliser ... pour vérifier" est juste la confirmation de 110%.En outre, toute personne capable de mettre en place cette exposition n'aurait aucun problème à faire le codage. Cheers –

3

Sur le papier, multipliez chaque partie de l'équation sur (MAX - min), puis regroupez les éléments pour obtenir MAX=some. Le papier et le crayon sont ce dont vous avez habituellement besoin avant d'écrire des fonctions C++ comme dans votre question.