bool to_rational(const exprt &expr, rationalt &rational_value) { if(expr.id()!=ID_constant) return true; const std::string &value=expr.get_string(ID_value); std::string no1, no2; char mode=0; for(std::string::const_iterator it=value.begin(); it!=value.end(); ++it) { const char ch=*it; if(isdigit(ch)) { if(mode==0) no1+=ch; else no2+=ch; } else if(ch=='/' || ch=='.') { if(mode==0) mode=ch; else return true; } else return true; } switch(mode) { case 0: rational_value=string2integer(no1); break; case '.': rational_value=string2integer(no1); rational_value+=rationalt(string2integer(no2))/power10(no2.size()); break; case '/': rational_value=string2integer(no1); rational_value/=string2integer(no2); break; default: return true; } return false; }
bool to_rational(const exprt &expr, rationalt &rational_value) { if(expr.id()!="constant") return true; const std::string &value=expr.get_string("value"); std::string no1, no2; char mode=0; for(unsigned i=0; i<value.size(); i++) { char ch=value[i]; if(isdigit(ch)) { if(mode==0) no1+=ch; else no2+=ch; } else if(ch=='/' || ch=='.') { if(mode==0) mode=ch; else return true; } else return true; } switch(mode) { case 0: rational_value=string2integer(no1); break; case '.': rational_value=string2integer(no1); rational_value+=rationalt(string2integer(no2))/power10(no2.size()); break; case '/': rational_value=string2integer(no1); rational_value/=string2integer(no2); break; default: return true; } return false; }