Bonjour à tous,
J'ai besoin de transformer un tableau de double en un tableau de float.
ca compile mais le resultat n'est pas correct.Code:
1
2
3
4
5 double *tabDouble; float *tabFloat; tabFloat = (float*) tabDouble;
:roll:
Version imprimable
Bonjour à tous,
J'ai besoin de transformer un tableau de double en un tableau de float.
ca compile mais le resultat n'est pas correct.Code:
1
2
3
4
5 double *tabDouble; float *tabFloat; tabFloat = (float*) tabDouble;
:roll:
Changer le type du pointeur ne va pas marcher !!!
Il faut copier chaque élément du tableau de double dans un tableau de float.
En effet, tu vas juste indiquer au pointeur que tu ne pointes plus sur des double, mais des float. Seulement la zone mémoire, elle, n'a pas changé!
Ton programme va alors interpréter une zone mémoire qui sensée être un double en float. Mais comme ces deux types de variables ne sont sans doute pas gérées de la même façon en mémoire, il lit n'importe quoi.
Globalement:
Tu as 16 octets dans la zone mémoire de TableauDeDouble: de 0 à 7 pour le premier double et de 8 à 15 pour le second.Code:double TableauDeDouble[2];
Quand tu fait:
Dans la même zone mémoire, les ocets 0 à 3 seront ton premier float (début de l'ex premier double) et les octets 4 à 7 le second (fin de l'ex premier double).Code:
1
2 float *MesFloat; MesFloat = (float*)TableauDeDouble;
Remarque que ton problème serait le même avec long/short.
En admettant que le tableau 'tabFloat' soit correctement allouer, la bonne façon de faire est :
Code:
1
2
3
4
5
6
7
8
9
10
11 // pour convertir 1 valeur, on déréférence explicitement les pointeurs // pour accéder aux valeurs *tabFloat = (float) *tabDouble; // pour convertir toute la table de n éléments for (int i=0; i<n; ++i) { // on accède aux valeurs par l'opérateur d'indexation tabFloat[i] = (float) tabDouble[i]; }