GMP vaguaries when converting strings to integers

2 Oct
2004
2 Oct
'04
10:42 a.m.
The following program shows that the behavior of GMP when converting strings to integers is, at best, questionable. While some aspects can be somehow defended, there are others that are, in my opinion, serious bugs.
1) Allowing blank spaces in the middle of numerals is simply a recipe for troubles.
2) Silent and thus undetectable failures of C++ constructors is a recipe for disaster. In C++ a constructor either succeeds in doing what it has to do, or it must throw an exception. Or call abort() if you still believe that exceptions are evil... whatever: silently masking the error is the worst thing that can be done.
All the best,
Roberto
--
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara@cs.unipr.it
#include <gmpxx.h>
#include <iostream>
using namespace std;
void
test(const char* s) {
mpz_class x = -1;
x = s;
cout << "x("" << s << "") --> " << x << endl;
}
int main() {
// Questionable success.
test(" 1234");
// Questionable success.
test("1234 ");
// Highly questionable success.
test("12 34");
// Highly questionable success.
test("12\n34");
// Expected silent, undetectable failure.
test(" ");
// Expected silent, undetectable failure.
test("1234a");
// OK.
test("-1234");
// Unexpected silent, undetectable failure.
test("+1234");
// Questionable silent, undetectable failure.
test("12.34");
// Questionable silent, undetectable failure.
test("1e3");
}
7658
Age (days ago)
7658
Last active (days ago)
0 comments
1 participants
participants (1)
-
Roberto Bagnara