Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

funciones matematicas basicas no funcionan correctamente #41

Open
Zardoz89 opened this issue Oct 9, 2020 · 4 comments
Open

funciones matematicas basicas no funcionan correctamente #41

Zardoz89 opened this issue Oct 9, 2020 · 4 comments
Labels
bug please review This issue is theoretically solved, but some review and/or testing is wanted before closing it.
Milestone

Comments

@Zardoz89
Copy link
Contributor

Zardoz89 commented Oct 9, 2020

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
Copy link
Contributor Author

Zardoz89 commented Oct 9, 2020

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 vii1 added the please review This issue is theoretically solved, but some review and/or testing is wanted before closing it. label Oct 10, 2020
@vii1 vii1 added this to the Versión 2.01 milestone Oct 10, 2020
@vii1 vii1 closed this as completed Oct 22, 2020
@vii1
Copy link
Owner

vii1 commented Nov 7, 2020

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

@vii1 vii1 reopened this Nov 7, 2020
@vii1 vii1 added bug and removed please review This issue is theoretically solved, but some review and/or testing is wanted before closing it. labels Nov 16, 2020
@vii1 vii1 mentioned this issue Mar 4, 2022
8 tasks
@vii1
Copy link
Owner

vii1 commented Mar 4, 2022

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

  • El modelo nativo (por ejemplo -fp3 que utiliza directamente las instrucciones del 387).
  • El modelo emulado compatible -fpi, que es compatible con IEEE y con buena precisión. Éste es el modelo que usa Watcom por defecto si no especificamos otro.
  • El modelo emulado rápido -fpc, que es más rápido que -fpi a costa de sacrificar compatibilidad y algo de precisión. Éste es el modelo con el que fue compilado DIV2 originalmente.

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:

  • 386, compilado con -3 -fpc
  • 586, compilado con -5 -fp5

@vii1 vii1 added the please review This issue is theoretically solved, but some review and/or testing is wanted before closing it. label Mar 4, 2022
vii1 pushed a commit that referenced this issue Mar 5, 2022
Magic numbers for buf and shift_status substituted by constants.
#41 - Filter LCTRL that Windows injects when using ALT GR
@Zardoz89
Copy link
Contributor Author

Zardoz89 commented Mar 7, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug please review This issue is theoretically solved, but some review and/or testing is wanted before closing it.
Projects
None yet
Development

No branches or pull requests

2 participants