LibCrypto: Add naive implementation of {Un,}SignedBigInteger::to_double

This commit is contained in:
Idan Horowitz 2021-09-06 21:20:20 +03:00 committed by Linus Groh
parent 62bc238ac3
commit bcdad57670
Notes: sideshowbarker 2024-07-18 04:34:19 +09:00
4 changed files with 16 additions and 0 deletions

View File

@ -63,6 +63,14 @@ u64 SignedBigInteger::to_u64() const
return ~(unsigned_value - 1); // equivalent to `-unsigned_value`, but doesnt trigger UBSAN
}
double SignedBigInteger::to_double() const
{
double unsigned_value = m_unsigned_data.to_double();
if (!m_sign)
return unsigned_value;
return -unsigned_value;
}
FLATTEN SignedBigInteger SignedBigInteger::plus(const SignedBigInteger& other) const
{
// If both are of the same sign, just add the unsigned data and return.

View File

@ -66,6 +66,7 @@ public:
String to_base(u16 N) const;
u64 to_u64() const;
double to_double() const;
const UnsignedBigInteger& unsigned_value() const { return m_unsigned_data; }
const Vector<u32, STARTING_WORD_SIZE> words() const { return m_unsigned_data.words(); }

View File

@ -112,6 +112,12 @@ u64 UnsignedBigInteger::to_u64() const
return value;
}
double UnsignedBigInteger::to_double() const
{
// FIXME: I am naive
return static_cast<double>(to_u64());
}
void UnsignedBigInteger::set_to_0()
{
m_words.clear_with_capacity();

View File

@ -57,6 +57,7 @@ public:
String to_base(u16 N) const;
u64 to_u64() const;
double to_double() const;
const Vector<Word, STARTING_WORD_SIZE>& words() const { return m_words; }