vii1 / DIV

Reconstrucción y posible fork de DIV Games Studio 2.0
GNU General Public License v3.0
48 stars 4 forks source link

funciones matematicas basicas no funcionan correctamente #41

Open Zardoz89 opened 3 years ago

Zardoz89 commented 3 years ago

las funciones sqrt(), cos() y probablemente el resto de las funciones trigonométricas, retornar el argumento tal cual.

Adjunto miniprograma de testeo

// Programa de testeo de las rutinas matematicas

program test_math1;

const
global
  var1 = 42;
  var2 = -42;
local
private
begin
  if (abs(var2) != var1)
    showError("error funci¢n abs()");
  end
  if (sqrt(10) != 3)
    showError("error funci¢n sqrt()");
  end
  if (pow(3, 2) != 9)
    showError("error funci¢n pow()");
  end

  if (cos(0) != 1000)
    showError("error funci¢n cos(0)");
  end
  if (cos(90000) != 0)
    showError("error funci¢n cos(90000)");
  end
  if (cos(180000) != -1000)
    showError("error funci¢n cos(180000)");
  end
  if (cos(-90000) != 0)
    showError("error funci¢n cos(-90000)");
  end
  if (cos(270000) != 0)
    showError("error funci¢n cos(270000)");
  end

  if (sin(0) != 0)
    showError("error funci¢n sin(0)");
  end
  if (sin(90000) != 1000)
    showError("error funci¢n sin(90000)");
  end
  if (sin(180000) != 0)
    showError("error funci¢n sin(180000)");
  end
  if (sin(-90000) != -1000)
    showError("error funci¢n sin(-90000)");
  end
  if (sin(270000) != -1000)
    showError("error funci¢n sin(270000)");
  end

  while (!key(_enter))
    write(0, 0, 0, 0, "Presionar ENTER para continuar");
    frame;
  end
end

function showError(msg)
begin
  while (!key(_enter))
    write(0, 0, 20, 0, msg);
    write(0, 0, 0, 0, "Presionar ENTER para continuar");
    frame;
  end
  exit(msg, -1);
end
Zardoz89 commented 3 years ago

También funciona mal la función sqrt en la calculadora. Mirando el código podría ser un problema de linkado con las librerías matematicas de open watcom ?

vii1 commented 3 years ago

Reabro porque get_distx() y get_disty() no están funcionando correctamente.

vii1 commented 2 years ago

Ok, para que quede registrado comento aquí cuál era el problema. Watcom incluye varios modelos posibles para las instrucciones de coma flotante:

Ahora bien, el -fpc tiene trampa y es que la documentación especifica que si se usa en un módulo, todo el proyecto debe usar -fpc, ya que de lo contrario puede causar problemas (y ya hemos visto que sí). Las librerías de terceros usaban hasta ahora el modelo por defecto que decidieron sus desarrolladores originales. Así que he decidido compilar dos versiones de estas librerías, una para cada versión de DIV coincidiendo con el mismo juego de instrucciones y modelo de coma flotante con el que se enlaza, es decir:

Zardoz89 commented 2 years ago

Ahora bien, el -fpc tiene trampa y es que la documentación especifica que si se usa en un módulo, todo el proyecto debe usar -fpc ¡Ostia! Pues puede que en mas de un caso, los modulos de terceros tengan una u otra opcion puesto sin saber este detalle.

En el caso de la DLL para CSVs, está compilandose con :

wcl386 csv.cpp -ox -zp4 -5 -s -l=div_dll