bool operator<=(const decimal &a, const decimal &b) { // 1. Comparamos signos. Si son distintos, el negativo es el menor. // 2. Cambiamos el tamaño de b para que coincida con el de a. // 3. Comparamos cifra a cifra, y devolvemos en consecuencia. if(a.is_negative() != b.is_negative()) return a.is_negative(); decimal t(b); t.resize(a.cifs, a.decs); bool a_menor = false, iguales = true; for(int i = a.cifs - 1; i >= 0; --i) { if(a.get_cifra(i) != t.get_cifra(i)) { iguales = false; if(a.get_cifra(i) < t.get_cifra(i)) { a_menor = true; } break; } } if(iguales) return true; // Invertimos el resultado si a y b son negativos. return a.is_negative() ? !a_menor : a_menor; }
bool operator==(const decimal &a, const decimal &b) { // 1. Comparamos signos. Si son diferentes devolvemos falso. // 2. Cambiamos el tamaño de b para que coincida con el de a. // 3. Comparamos cifra a cifra. if(a.is_negative() != b.is_negative()) return false; decimal t(b); t.resize(a.cifs, a.decs); for(int i = 0; i < static_cast<int>(a.long_buffer); ++i) if(a.buffer[i] != t.buffer[i]) return false; return true; }