Avatar billede Slettet bruger
03. juli 2006 - 16:23 Der er 23 kommentarer og
1 løsning

exp i funktionen math.h

hvorfor får jeg en "nan" fejl på nedenstående.

calculation = calculation * exp (-delta_time / tau) + extra

extra er en float
tau er en int
delta_time er en int
har provet calculation både som double og float...
Avatar billede Slettet bruger
03. juli 2006 - 16:25 #1
exp er eksponential funktionen.....
Avatar billede arne_v Ekspert
03. juli 2006 - 17:00 #2
maa vi se et helt kode fragment ?
Avatar billede arne_v Ekspert
03. juli 2006 - 17:09 #3
#include <stdio.h>
#include <math.h>

int main()
{
  float extra = 1.0;
  int tau = -2;
  int delta_time = 2;
  double calculation = 2.0;
  calculation = calculation * exp (-delta_time / tau) + extra;
  printf("%f\n",calculation);
  return 0;
}

udskriver 6.436564 hos mig, hvilket umiddelbart ser rigtigt ud
Avatar billede lars314 Nybegynder
03. juli 2006 - 22:30 #4
NAN = "Not A Number" (så vidt jeg ved)

Det kunne betyde at en af dine variable er uinitialiseret.
Avatar billede lars314 Nybegynder
03. juli 2006 - 22:35 #5
Mest sandsynligt er det en af type float eller double, da de kan indholde en bit-kombination, der ikke repræseneter en gyldigt floating point vaule.
Avatar billede Slettet bruger
04. juli 2006 - 08:49 #6
Det er svært at indsætte hele koden da den udledes af flere udregninger... men følgende værdier får jeg udskrevet på skærmen vha printf

extra 677.402283
delta_time 10011
tau 534
calculation nan

værdierne er udskrevet lige efter udregningen!
Avatar billede lars314 Nybegynder
04. juli 2006 - 09:02 #7
Hvad var værdierne inden udregningen?
Avatar billede Slettet bruger
04. juli 2006 - 09:06 #8
de samme.....

men callculation er lig 0 fra start!!!!!
Avatar billede lars314 Nybegynder
04. juli 2006 - 09:20 #9
Hmm mærkeligt.
Det burde give samme værdi som extra,
det vil sige 677.402283, da det første led bilver nul pga calculation er 0.

En ting der lige slår mig. Du er godt klar over at -delta_time/tau er en heltals division, så den giver -18 og ikke -18.7472... som resultat.
Avatar billede Slettet bruger
04. juli 2006 - 10:12 #10
nej hvis dne er nul kommer den med nan og hvis jeg så sætter calculation til en værdi får jeg i steder inf!!
Avatar billede segmose Nybegynder
04. juli 2006 - 16:31 #11
prøv lige at indsætte følgende istedet for og vis resultatet her:

printf("før %f\n",calculation);
float exparg = -delta_time / tau;
printf("exparg:%f\n",exparg);
float expcal = exp (exparg);
printf("expcal:%f\n",expcal);
calculation = calculation * expcal  + extra;
printf("efter:%f\n",calculation);
Avatar billede Slettet bruger
05. juli 2006 - 08:06 #12
exparg:8043009.000000
expcal:inf
efter:inf
Avatar billede lars314 Nybegynder
05. juli 2006 - 09:31 #13
Lad os være enige om der er noget helt galt i din kode eller i de tal du tror du putter ind i den.

-10011/534 kan ikke give 8043009.000000.

Er du sten sikker på værdien af delta_time og tau ?
Avatar billede segmose Nybegynder
05. juli 2006 - 09:38 #14
Hvad ville du forvente hvis du fik lavede følgende beregning:
float expcal = exp (8043009.000000);

prøv at indsæt følgende i programmet.
float expcal = exp (8043009.000000);
perror(errno); // udskriver seneste fejl som text.

printf("MAX FLOAT %f\n",MAX_FLOAT);

Hvis der ikke er en fejl i dine data så skal du nok bruge double instedet for float og all de funktioner du bruger skal returnere double.
Avatar billede yates Nybegynder
07. juli 2006 - 13:45 #15
Tror det er værd at prøve at lægge 0.0 til Tau:

#include <stdio.h>
#include <math.h>

int main()
{
  float extra = 1.0;
  int tau = -2;
  int delta_time = 2;
  double calculation = 2.0;
  calculation = calculation * exp (-delta_time /(0.0+ tau)) + extra;
  printf("%f\n",calculation);
  return 0;
}
Avatar billede yates Nybegynder
07. juli 2006 - 13:51 #16
Sry,
skulle blive:

calculation = calculation * exp ((0.0-delta_time) /(0.0+ tau)) + extra;

Y.
Avatar billede Slettet bruger
20. juli 2006 - 10:22 #17
fejlen lå i at det skulle stå (float) foran de 2 int der divideres med hinanden... ellers rundede den altid ned :/
Avatar billede lars314 Nybegynder
20. juli 2006 - 14:18 #18
Som jeg sagde

> En ting der lige slår mig.
> Du er godt klar over at -delta_time/tau er en heltals division,
> så den giver -18 og ikke -18.7472... som resultat.
Avatar billede Slettet bruger
20. juli 2006 - 14:28 #19
min fejl....

Hvis du laver et svar er pointene dine :)
Avatar billede lars314 Nybegynder
20. juli 2006 - 14:50 #20
Undskyld det lød lidt som et surt opstød fra mig. Det må være varmen.
Det jeg mente var at jeg var ked at jeg ikke havde sagt det tydeligere,
så du kunne havde sparet noget tid.
Avatar billede Slettet bruger
20. juli 2006 - 15:19 #21
Nej da  :) alt okay.... men derfor skal du nu alligevel have dine point ;)
Avatar billede Slettet bruger
01. august 2006 - 21:58 #22
Laver du et svar Lars :o)
Avatar billede lars314 Nybegynder
02. august 2006 - 07:17 #23
Ja selvfølgelig.
Avatar billede lars314 Nybegynder
02. august 2006 - 07:17 #24
Sådan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester