Avatar billede tax Nybegynder
18. maj 2005 - 09:23 Der er 7 kommentarer

Sinus og cosinus som preprocessor direktiver?

Jeg er ved at skrive et program, der udregner en matrice, der er produktet af 4-5 andre matricer.

Jeg definerer de enkelte matricer således:


Matrix M1 =
          {{ 1, 0, 0, 0,
            0, 1, 0, 0,
            0, 0, 1, 0,
            0, 0, 0, 1}};

Det fungerer også fint når jeg skal gange dem med min matrixfunktion.

Problemet opstår når jeg skal lave en rotationsmatrix, hvor flere af cellerne er sinus eller cosinus udtryk. Eg.

Matrix M1 =
          {{ sin(a), 0, 0, 0,
            0, 1, 0, 0,
            0, 0, 1, 0,
            0, 0, 0, 1}};

Det duer ikke, da sinus ikke er et preprocessor "ord".

Hvad kan jeg gøre?
Avatar billede arne_v Ekspert
18. maj 2005 - 09:49 #1
Hvad fejl får du og hvilken compiler ?

Jeg formoder at det er "ikke konstant udtryk" der generer den.

GCC har iukke noget problem med sin bare math.h eller cmath er included.
Avatar billede tax Nybegynder
18. maj 2005 - 10:05 #2
Jeg bruger "gcc version 2.95.3 20010315 (release)".

Fejlen er "initializer element for `M1.var[0]' is not constant"

Jeg er nok nød til at initialisere cellerne i runtime.
Avatar billede arne_v Ekspert
18. maj 2005 - 10:44 #3
tror jeg
Avatar billede stefanfuglsang Juniormester
18. maj 2005 - 15:04 #4
Prøv at lave et lille program, der udskriver din ønskede matrix i en fil;
så kan du indlæse dette i din editor, og bruge det til at initialisere din matrix - hvis du har en fast matrix, ellers er du nødt til, som du skriver, at gøre det runtime
Avatar billede mookid8000 Nybegynder
31. maj 2005 - 11:28 #5
Jeg vil mene at du ER nødt til at initialisere sin- og cos-elementer ved runtime. Hvis compileren skulle være i stand til at initialisere disse elementer skulle den jo kalde funktionerne sin() og cos(), og den slags duer ikke på ved compile time.

Hvis det er vigtigt at initialisere dem til noget meningsfuldt så kan du jo "hard-code" nogle konstanter ind i programmet vha defines, den slags kan være pænt nok (f.eks. #define SIN_PI_SQUARED 0.17xxx)
Avatar billede tax Nybegynder
01. juni 2005 - 07:54 #6
Jeg udregner dem nu på compile time.

Hvis nogen af deltagerene ønsker points skal de sige til ellers lukker jeg snart.
Avatar billede tax Nybegynder
01. juni 2005 - 07:55 #7
Jeg mente runtime! :)
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