+template < typename N, typename E >
+bool number< N, E >::operator==(const number< N, E >& n) const
+{
+ if (sign != n.sign)
+ {
+ return false;
+ }
+
+ size_type ini = 0;
+ size_type fin = std::min(chunk.size(), n.chunk.size());
+ size_type i; //problema de VC++, da error de redefinición
+
+ // "intersección" entre ambos chunks
+ // +-----+-----+------+------+
+ // | | | | | <--- mio
+ // +-----+-----+------+------+
+ // +-----+-----+------+
+ // | | | | <--- chunk de n
+ // +-----+-----+------+
+ //
+ // |------------------|
+ // Esto se procesa en este for
+ for (i = ini; i < fin; ++i)
+ {
+ if (chunk[i] != n.chunk[i])
+ {
+ return false;
+ }
+ }
+
+ // si mi chunk es más grande que el del otro, sólo me queda
+ // ver si el resto es cero.
+ chunk_type const *chunk_grande = 0;
+ if (chunk.size() > n.chunk.size())
+ {
+ chunk_grande = &chunk;
+ fin = chunk.size() - n.chunk.size();
+ }
+ else if (chunk.size() < n.chunk.size())
+ {
+ chunk_grande = &n.chunk;
+ fin = n.chunk.size() - chunk.size();
+ }
+ if (chunk_grande) // Si tienen tamaños distintos, vemos que el resto sea cero.
+ {
+ for (; i < fin; ++i) // Sigo desde el i que había quedado
+ {
+ if ((*chunk_grande)[i] != 0)
+ {
+ return false;
+ }
+ }
+ }
+ return true; // Son iguales
+}
+