Quellcode durchsuchen

Temporary fix for real::sqrt() which I broke recently.

legacy
Sam Hocevar vor 7 Jahren
Ursprung
Commit
1c27691ef9
1 geänderte Dateien mit 2 neuen und 2 gelöschten Zeilen
  1. +2
    -2
      src/math/real.cpp

+ 2
- 2
src/math/real.cpp Datei anzeigen

@@ -726,12 +726,12 @@ template<> real sqrt(real const &x)
ret.m_mantissa.resize(x.m_mantissa.count()); ret.m_mantissa.resize(x.m_mantissa.count());
ret.m_mantissa[0] = v.x << 9; ret.m_mantissa[0] = v.x << 9;


/* FIXME: check this, it’s been a long time… */ /* FIXME FIXME FIXME: this is broken */
ret.m_exponent = -x.m_exponent / 2 + (v.x >> 23) - (u.x >> 23); ret.m_exponent = -x.m_exponent / 2 + (v.x >> 23) - (u.x >> 23);


/* FIXME: 1+log2(bigit_count()) steps of Newton-Raphson seems to be enough for /* FIXME: 1+log2(bigit_count()) steps of Newton-Raphson seems to be enough for
* convergence, but this hasn't been checked seriously. */ * convergence, but this hasn't been checked seriously. */
for (int i = 1; i <= x.bigit_count(); i *= 2) for (int i = 1; i <= 1024 * x.bigit_count(); i *= 2)
{ {
ret = ret * (real::R_3() - ret * ret * x); ret = ret * (real::R_3() - ret * ret * x);
--ret.m_exponent; --ret.m_exponent;


||||||
x
 
000:0
Laden…
Abbrechen
Speichern