Browse Source

Fixed #26 the wrong result of rotmg. Used fabs() instead of abs().

tags/v0.1alpha2^2
Xianyi Zhang 15 years ago
parent
commit
fa8e4fd879
2 changed files with 10 additions and 3 deletions
  1. +1
    -0
      Changelog.txt
  2. +9
    -3
      interface/rotmg.c

+ 1
- 0
Changelog.txt View File

@@ -16,6 +16,7 @@ common:
issue #19 on github) issue #19 on github)
* Fixed issue #23. Fixed a bug of f_check script about generating link flags. * Fixed issue #23. Fixed a bug of f_check script about generating link flags.
* Added openblas_set_num_threads for Fortran. * Added openblas_set_num_threads for Fortran.
* Fixed #25 a wrong result of rotmg.


x86/x86_64: x86/x86_64:
* *


+ 9
- 3
interface/rotmg.c View File

@@ -7,6 +7,12 @@
#define GAMSQ 16777216.e0 #define GAMSQ 16777216.e0
#define RGAMSQ 5.9604645e-8 #define RGAMSQ 5.9604645e-8


#ifdef DOUBLE
#define ABS(x) fabs(x)
#else
#define ABS(x) fabsf(x)
#endif

#ifndef CBLAS #ifndef CBLAS


void NAME(FLOAT *dd1, FLOAT *dd2, FLOAT *dx1, FLOAT *DY1, FLOAT *dparam){ void NAME(FLOAT *dd1, FLOAT *dd2, FLOAT *dx1, FLOAT *DY1, FLOAT *dparam){
@@ -47,7 +53,7 @@ void CNAME(FLOAT *dd1, FLOAT *dd2, FLOAT *dx1, FLOAT dy1, FLOAT *dparam){
dq2 = dp2 * dy1; dq2 = dp2 * dy1;
dq1 = dp1 * *dx1; dq1 = dp1 * *dx1;


if (! (abs(dq1) > abs(dq2))) goto L40;
if (! (ABS(dq1) > ABS(dq2))) goto L40;


dh21 = -(dy1) / *dx1; dh21 = -(dy1) / *dx1;
dh12 = dp2 / dp1; dh12 = dp2 / dp1;
@@ -140,7 +146,7 @@ L150:
goto L130; goto L130;


L160: L160:
if (! (abs(*dd2) <= RGAMSQ)) {
if (! (ABS(*dd2) <= RGAMSQ)) {
goto L190; goto L190;
} }
if (*dd2 == ZERO) { if (*dd2 == ZERO) {
@@ -157,7 +163,7 @@ L180:
goto L160; goto L160;


L190: L190:
if (! (abs(*dd2) >= GAMSQ)) {
if (! (ABS(*dd2) >= GAMSQ)) {
goto L220; goto L220;
} }
igo = 3; igo = 3;


Loading…
Cancel
Save