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...
Annonceindlæg fra Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
Slettet bruger
03. juli 2006 - 16:25
#1
exp er eksponential funktionen.....
maa vi se et helt kode fragment ?
#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
NAN = "Not A Number" (så vidt jeg ved) Det kunne betyde at en af dine variable er uinitialiseret.
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.
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!
Hvad var værdierne inden udregningen?
Slettet bruger
04. juli 2006 - 09:06
#8
de samme..... men callculation er lig 0 fra start!!!!!
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.
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!!
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);
Slettet bruger
05. juli 2006 - 08:06
#12
exparg:8043009.000000 expcal:inf efter:inf
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 ?
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.
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; }
07. juli 2006 - 13:51
#16
Sry, skulle blive: calculation = calculation * exp ((0.0-delta_time) /(0.0+ tau)) + extra; Y.
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 :/
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.
Slettet bruger
20. juli 2006 - 14:28
#19
min fejl.... Hvis du laver et svar er pointene dine :)
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.
Slettet bruger
20. juli 2006 - 15:19
#21
Nej da :) alt okay.... men derfor skal du nu alligevel have dine point ;)
Slettet bruger
01. august 2006 - 21:58
#22
Laver du et svar Lars :o)
02. august 2006 - 07:17
#23
Ja selvfølgelig.
02. august 2006 - 07:17
#24
Sådan
Kurser inden for grundlæggende programmering