If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Solved

Posted on 2004-09-21

Hello, i'm tyring too check if an float value that someone enters is correct and does not exceed a certain range. Right now I'm trying to use E, where represnts the exponent to a power of 10 and digits represents 1 or more juxtaposed numbers. E can be the lower case, "e". There can be no more than 7 digits in any floating points number excluding the exponent (the decimal point does not count as a digit) Exponents are restriced to range of -38 to 38.

This is what I have right now:

else if(out == 3)

{

int exponent_check = 0;

std::istringstream(Lexeme.substr((Lexeme.length())-2 ,Lexeme.length())) >> exponent_check;

if(((exponent_check >= 38) || (exponent_check <= -38)) &&

((Lexeme.find("e") == ((Lexeme.length())-3)) || (Lexeme.find("E") == ((Lexeme.length())-3)) ||

(Lexeme.find("e") == ((Lexeme.length())-4)) || (Lexeme.find("E") == ((Lexeme.length())-4))) && Lexeme.find(".") != 0)

{

cout << "\n*** ERROR - Float Literal exponent is out of range ( -38 < x < 38 )" << endl;

// num_bad_real_constants++;

return 40;

}

I'm trying to check the the length then compare. The number that I am checking is the following:

1.35562127e1

This number should be throwing an error but it doesn't so I need to know what I am doing wrong in the check. Any help with this would be great.

This is what I have right now:

else if(out == 3)

{

int exponent_check = 0;

std::istringstream(Lexeme.

if(((exponent_check >= 38) || (exponent_check <= -38)) &&

((Lexeme.find("e") == ((Lexeme.length())-3)) || (Lexeme.find("E") == ((Lexeme.length())-3)) ||

(Lexeme.find("e") == ((Lexeme.length())-4)) || (Lexeme.find("E") == ((Lexeme.length())-4))) && Lexeme.find(".") != 0)

{

cout << "\n*** ERROR - Float Literal exponent is out of range ( -38 < x < 38 )" << endl;

// num_bad_real_constants++;

return 40;

}

I'm trying to check the the length then compare. The number that I am checking is the following:

1.35562127e1

This number should be throwing an error but it doesn't so I need to know what I am doing wrong in the check. Any help with this would be great.

5 Comments

Make some tests with log() function.

Remember to #include "math.h" header file.

Perhaps you should have this question in the C++ TA. I can give you a C solution if you want. Alernatively, I can move this question to C++ TA. Since some experts visit both C and C++ TAs, may beyou can wait a while before they see and comment on this.

sunnycoder

But, I have got one suggestion for you: Divide your condition statement to different if statements. And don't do the calculation inside a condition statement. Make it as simple as possible. Then it will be easier to debug and understand and errors will be lesser.

-ssnkumar

1.0e+38

1.0e0000000000038

I'd suggest this approach:

(0) Get a leading plus or minus, if not found, assume plus.

(1) Get a digit string, if none found, error out.

(2) If there's a dot, get another digit string, if not found, assume .00000

(2a) get a letter, if it's 'E' or 'e':

(2a.a) get a sign, if not foiund. assume plus.

(2.a.b) get a digit string, if not found, error out.

------------------

That's a much more bulletproof way to parse a real constant.

(0) Get a leading plus or minus, if not found, assume plus.

(1) Get a digit string, if none found, error out.

(2) If there's a dot, get another digit string, if not found, assume .00000

(2a) get a letter, if it's 'E' or 'e':

(2a.a) get a sign, if not foiund. assume plus.

(2.a.b) get a digit string, if not found, error out.

(2b) if something other than 'E' or 'e' or white chars, error out

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Title | # Comments | Views | Activity |
---|---|---|---|

how to declare a 2-dimensional version of strlen | 4 | 220 | |

How to organize data in excel ? | 2 | 115 | |

C++ check and remove last word from a string | 5 | 214 | |

How to set environment variables in C | 2 | 86 |

Join the community of 500,000 technology professionals and ask your questions.