problem while detecting floating point operations

Discussion in 'C++' started by alex, Dec 19, 2006.

  1. alex

    alex Guest

    hi friends ...

    i am facing a problem while detecting floating point operations in my
    project, please help me.

    i want to find out the places in my C/C++ project where i am doing
    floating point operations.
    As it is a big project it is not possible to check every line manually,
    so is there any other method
    to detect floating point operations in my project?


    I just compiled the project with option '-msoft-float', it is reporting
    errors at the places where 'float' variables are being used. But it is
    not reporting any error for the places where we are using floating
    literals ...
    to make myself clear,i would give an example code snippet,

    example:

    //first case

    float x;

    printf("%f",x); // here it is reporting an error because we are
    trying to use the variable (float) x;

    //in second case

    int y;

    y = 4.5 * 2.5; // here it is not reporting any error .

    what should have to be done to detect these kind of operations
    also.

    library: GCC 3.4.3
    kernel: 2.6.9


    Thanks in advance
     
    alex, Dec 19, 2006
    #1
    1. Advertising

  2. alex wrote:
    .....
    > //in second case
    >
    > int y;
    >
    > y = 4.5 * 2.5; // here it is not reporting any error .
    >
    > what should have to be done to detect these kind of operations
    > also.


    This likely emits no floating point ops so it is expected that it won't
    detect anything.

    You could write a simple tokenizer that finds floating point literals.
     
    Gianni Mariani, Dec 19, 2006
    #2
    1. Advertising

  3. alex

    Ondra Holub Guest

    alex napsal:
    > hi friends ...
    >
    > i am facing a problem while detecting floating point operations in my
    > project, please help me.
    >
    > i want to find out the places in my C/C++ project where i am doing
    > floating point operations.
    > As it is a big project it is not possible to check every line manually,
    > so is there any other method
    > to detect floating point operations in my project?
    >
    >
    > I just compiled the project with option '-msoft-float', it is reporting
    > errors at the places where 'float' variables are being used. But it is
    > not reporting any error for the places where we are using floating
    > literals ...
    > to make myself clear,i would give an example code snippet,
    >
    > example:
    >
    > //first case
    >
    > float x;
    >
    > printf("%f",x); // here it is reporting an error because we are
    > trying to use the variable (float) x;
    >
    > //in second case
    >
    > int y;
    >
    > y = 4.5 * 2.5; // here it is not reporting any error .
    >
    > what should have to be done to detect these kind of operations
    > also.
    >
    > library: GCC 3.4.3
    > kernel: 2.6.9
    >
    >
    > Thanks in advance


    Hi.

    You can try to

    #define float MyFType
    #define double MyDType
    #define long double MyLDType

    Then rebuild. As long as you won't define arithnmetic operations for
    My*Type, compiler should complain. Maybe you will need to define
    constructors and operators for typecasting to float/double/long double.

    BR
    Ondra
     
    Ondra Holub, Dec 19, 2006
    #3
  4. alex a écrit :
    > hi friends ...
    >
    > i am facing a problem while detecting floating point operations in my
    > project, please help me.
    >
    > i want to find out the places in my C/C++ project where i am doing
    > floating point operations.
    > As it is a big project it is not possible to check every line manually,
    > so is there any other method
    > to detect floating point operations in my project?
    >
    >
    > I just compiled the project with option '-msoft-float', it is reporting
    > errors at the places where 'float' variables are being used. But it is
    > not reporting any error for the places where we are using floating
    > literals ...
    > to make myself clear,i would give an example code snippet,
    >
    > example:
    >
    > //first case
    >
    > float x;
    >
    > printf("%f",x); // here it is reporting an error because we are
    > trying to use the variable (float) x;
    >
    > //in second case
    >
    > int y;
    >
    > y = 4.5 * 2.5; // here it is not reporting any error .
    >
    > what should have to be done to detect these kind of operations
    > also.
    >
    > library: GCC 3.4.3
    > kernel: 2.6.9
    >
    >
    > Thanks in advance
    >


    Well, your compiler is smart enough to know that
    y = 4.5 * 2.5;
    is evaluated and casted into int at compiled time and so doesn't report
    an error because no floating point operation is performed at exec time.

    Now, if you want to detect everyline where a floating point operation is
    executed at compile time, this is tricky; you would have to locate lines
    containg float constant and defines representing a float.

    Perhaps it is worth doing a 'gcc -E' to get the file after preprocessing
    stage and track back float point values.

    Michael
     
    Michael DOUBEZ, Dec 19, 2006
    #4
  5. alex

    alex Guest

    thank you friends I solved the problem using some third part lexer
    thank you very much
     
    alex, Dec 22, 2006
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. H aka N

    floating point operations

    H aka N, Jan 18, 2006, in forum: VHDL
    Replies:
    0
    Views:
    583
    H aka N
    Jan 18, 2006
  2. MariuszK
    Replies:
    8
    Views:
    20,744
    shaz.cute86
    Oct 4, 2008
  3. alex
    Replies:
    3
    Views:
    290
  4. Saraswati lakki
    Replies:
    0
    Views:
    1,428
    Saraswati lakki
    Jan 6, 2012
  5. teeshift
    Replies:
    2
    Views:
    298
    Chris Pearl
    Dec 1, 2006
Loading...

Share This Page