int main(void) { char *str; str = base_convert("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "0123456789ABCDEF", "0123456789"); if (str) { puts(str); free(str); } else { perror("base_convert"); return EXIT_FAILURE; } str = base_convert("FFFFFFFF", "0123456789ABCDEF", "0123456789"); if (str) { puts(str); free(str); } else { perror("base_convert"); return EXIT_FAILURE; } str = base_convert("FFFFFFFF", "0123456789ABCDEF", "01"); if (str) { puts(str); free(str); } else { perror("base_convert"); return EXIT_FAILURE; } str = base_convert("1111111111111111", "01", "0123456789ABCDEF"); if (str) { puts(str); free(str); } else { perror("base_convert"); return EXIT_FAILURE; } str = base_convert("999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", "0123456789", "0123456789ABCDEF"); if (str) { puts(str); free(str); } else { perror("base_convert"); return EXIT_FAILURE; } return EXIT_SUCCESS; }
double Units::unit_convert (const Unit& from, const Unit& to, const double value) { if (!compatible (from, to)) throw std::string ("Cannot convert [") + from.native_name () + "] with base [" + from.base_name () + "] to [" + to.native_name () + "] with base [" + to.base_name () + "]"; const double from_base = from.to_base (value); const double to_base = base_convert (from.base_name (), to.base_name (), from_base); const double native = to.to_native (to_base); #if 0 std::ostringstream tmp; tmp << "Converting " << value << " [" << from.native_name () << "] to " << native << " [" << to.native_name () << "] through " << from_base << " [" << from.base_name () << "]"; if (from.base_name () == to.base_name ()) daisy_approximate (from_base, to_base); else tmp << " and " << to_base << " [" << to.base_name () << "]"; Assertion::message (tmp.str ()); #endif return native; }
bool valid (const double value) const { if (!from.in_native (value)) return false; const double from_base = from.to_base (value); const double to_base = base_convert (from.base_name (), to.base_name (), from_base); return to.in_base (to_base); }