es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer esta expresión que involucra funciones de punto flotante una constante de tiempo de compilación?

Tengo una constante entera, steps, que se calcula utilizando la función de piso del cociente de otras dos variables constantes. Sin embargo, cuando intento usar esto como la longitud de un array, Visual Studio me indica que debe ser un valor constante y que el valor actual no se puede usar como constante. ¿Cómo puedo hacer esto una constante “verdadera” que se pueda usar como longitud de un array? ¿Es la función de piso el problema y hay alguna alternativa que podría usar?

const int simlength = 3.154*pow(10,7);
const float timestep = 100;
const int steps = floor(simlength / timestep);

struct body bodies[bcount];

struct body {
    string name;
    double mass;
    double position[2];
    double velocity[2];
    double radius;
    double trace[2][steps];
};
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la función floor() devuelve un valor en tiempo de ejecución, el cual no puede ser utilizado como un valor constante para definir la longitud del arreglo. Para hacer de steps un verdadero valor constante, puedes utilizar la directiva del preprocesador #define para definirlo como un valor constante en tiempo de compilación:

    #define STEPS (int)(simlength / timestep)
    
    const int simlength = 3.154*pow(10,7);
    const float timestep = 100;
    const int steps = STEPS;
    
    struct body bodies[bcount];
    
    struct body {
        string name;
        double mass;
        double position[2];
        double velocity[2];
        double radius;
        double trace[2][STEPS];
    };
    

    La constante STEPS se define como el resultado del cálculo simlength / timestep, lanzado como un entero utilizando el tipo de dato (int). Este valor se utiliza para definir la longitud del arreglo trace en la estructura body.

Comments are closed.