Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   una simple función, un grave problema.. (https://www.clubdelphi.com/foros/showthread.php?t=16301)

DynaRoc 23-11-2004 14:55:43

una simple función, un grave problema..
 
Buenas, el caso es que necesito hacer una simple función que me calcule lo siguiente :

( 35 + 2*(111 - 7,5*log10(5-1) - 95) = 59

todos los datos serán recogidos por textfield y guardados en variables DOUBLE ( ya que la función log10 no puede trabajar con enteros)

Aki os pongo el código ke he kreado, pero el problema es que el resultado que me dá no es 59, sino 76.03!!!!

Smax := StrToFloat(Edit1.text); // le meto 95
SmaxLimite := StrToFloat(Edit2.Text); // 111
n_canales := StrToFloat(Edit6.Text); // 5
S_I_tipo := 35.0;

un_canal := n_canales - 1.0; // debería dar 4, si le meto 5
rest_ci := -7.5*(Log10(un_canal));

Edit5.Text := FloatToStr(S_I_tipo + 2.0*(Smaxlimite - rest_ci - Smax)); // muestro el resultado en un textfiled.

el problema es que esto no me dá el resultado correcto ( en papel y con la calculadora)

alguien podría ayudarme ? seguro que es una tontería vamos :)

marcoszorrilla 23-11-2004 15:45:20

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 var
 nVar:Double;
 begin
 nVar:=( 35 + 2*(111 - 7.5*log10(5-1) - 95));
 ShowMessage(FormatFloat(',0.000',nVar));
 {El resultdo es 57,96 el mismo que me da
 en la Hoja de cálculo}
 end;

Un Saludo.

marcoszorrilla 23-11-2004 15:51:16

Por cierto eso me recuerda a esto que tuve que hacer cierto día:

//Como no hubo manera de hacerla funcionar la he tenido que desglosar
//en cuatro secciones.
Código:

  IF nEncesta > 0
  PRIMERO:=LOG(nEncesta/100)/LOG(10)
  SEGUNDO:=100 - 58.859191 * PRIMERO
  TERCERO:=  -0.0015225759 * SEGUNDO + 0.4753844
  CUARTO:= 10^TERCERO
  nCoefici:= INT(CUARTO * nKilomet ^ nConstan / 0.2 / nEncesta)

Un Saludo.

DynaRoc 23-11-2004 16:07:52

lo primero gracias marcoszorrilla por contestar, llevo como 3 dias con esta tontería que no logro hacer funcionar :)


lo que dices en tu 1º post, claro que funciona, pero el problema ocurre cuando todos los parámetros de la función se obtienen de 3 o 4 textfield y se guardan en Double

no sé pq motivo no da el resultado 56!!! ( dá 76!!)

con respecto a tu 2º mensaje, no te he entendido lo que has explicado.

por cierto y para hacer el antilog ? sería con la funcion power ? ejemplo :

Power(10,23/10); // antilog(23)

ó 10^(23/10);

Gracias por adelantado :)

marcoszorrilla 23-11-2004 16:14:16

Pues convendría mostrar el valor que tiene cada uno despues de la conversión a Double, ahí puede estar el problema, que obtienes más o menos decimales.

En cuanto al segundo ejemplo que pongo no tiene nada que ver con Delphi está hecho con Clipper, pero es un ejemplo de como a veces una función hay que dividirla en pasos para racionalizarla, esta función en una calculadora científica funcionaba y también en la hoja de cálculo, el problema el tipo de cálculo que utilizaba Clipper, por lo que para hacerla funciona la tuve que dividir en 4 tramos como vés.

Un Saludo.

marcoszorrilla 23-11-2004 16:16:03

Por cierto en la unidad Math, también existen estás funciones:
Código Delphi [-]
 { Logorithmic functions }
 function LnXP1(X: Extended): Extended;   { Ln(X + 1), accurate for X near zero }
 function Log10(X: Extended): Extended;                     { Log base 10 of X}
 function Log2(X: Extended): Extended;                      { Log base 2 of X }
 function LogN(Base, X: Extended): Extended;                { Log base N of X }

Un Saludo.

DynaRoc 23-11-2004 16:39:55

madre mia si es pa matarme jajaja


gracias marcoszorrilla sugerir que valla mostrando todos los valores y así ver el error :)

pues no tiene más misterio aki me he ekivocao xDDD

rest_ci := -7.5*(Log10(un_canal));
Edit5.Text := FloatToStr(S_I_tipo + 2.0*(Smaxlimite - rest_ci - Smax)); // muestro el resultado en un textfiled.

normal -----> - - = +

solucion :

rest_ci := +7.5*(Log10(un_canal));

gracias de nuevo por las funciones jeje

saludos


La franja horaria es GMT +2. Ahora son las 14:14:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi