Program Listing for File BinaryInteger.h
↰ Return to documentation for file (ADS/numeric/BinaryInteger.h)
/*--------------------------------------------------------------------------*/
/*-------------------------- File BinaryInteger.h --------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/
#ifndef __ADS_BinaryInteger
#define __ADS_BinaryInteger
/* self-identification: #endif constant */
/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/Contract.h"
#include "ADS/numeric/Polynomial.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <vector>
/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/
namespace ADS {
using Bits = std::vector< int >;
inline Bits toBits( std::uint64_t x , std::size_t n = 0 );
inline std::uint64_t fromBits( const Bits & b );
inline Bits carry( const std::vector< long > & c );
inline Bits binaryAdd( const Bits & X , const Bits & Y );
inline std::vector< long > widen( const Bits & X );
inline Bits multiplyBinarySchool( const Bits & X , const Bits & Y ,
long * mults = nullptr );
inline Bits multiplyBinaryFour( const Bits & X , const Bits & Y ,
long * mults = nullptr );
inline Bits multiplyBinaryKaratsuba( const Bits & X , const Bits & Y ,
long * mults = nullptr );
inline std::uint64_t ahmes( std::uint64_t a , std::uint64_t b ,
long * steps = nullptr );
/*--------------------------------------------------------------------------*/
} // end( namespace ADS )
/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/numeric/impl/BinaryInteger.tpp"
/*--------------------------------------------------------------------------*/
#endif /* BinaryInteger.h included */
/*--------------------------------------------------------------------------*/
/*------------------------ End File BinaryInteger.h ------------------------*/
/*--------------------------------------------------------------------------*/