У меня есть общая структура, подобная следующей (внутри общего шаблона):
struct AY_ALIGN(64) {
T parm1;
T parm2;
T parm3;
T parm4;
T parm5;
};
Когда я назначаю членов с целыми числами, вывод правильный:
pr->u.p.parm1 = 0;
pr->u.p.parm2 = 2;
pr->u.p.parm3 = 1;
pr->u.p.parm4 = 1;
pr->u.p.parm5 = 1;
printf("The values: parm1=%i, parm2=%i, parm3=%i, parm4=%i, parm5=%i.\n",
pr->u.p.parm1,
pr->u.p.parm2,
pr->u.p.parm3,
pr->u.p.parm4,
pr->u.p.parm5);
Функция printf () дает правильные значения.
Проблема возникает при использовании удваивается следующим образом:
*(double *)&pr->u.p.parm1 = 1.0;
*(double *)&pr->u.p.parm2 = 2.0;
*(double *)&pr->u.p.parm3 = 1.0;
*(double *)&pr->u.p.parm4 = 1.0;
*(double *)&pr->u.p.parm5 = 1.0;
printf("The values: parm1=%f, parm2=%f, parm3=%f, parm4=%f, parm5=%f.\n",
*(double *)&pr->u.p.parm1,
*(double *)&pr->u.p.parm2,
*(double *)&pr->u.p.parm3,
*(double *)&pr->u.p.parm4,
*(double *)&pr->u.p.parm5);
Вывод здесь:
parm1=0.000000
parm2=0.000000
parm3=0.000000
parm4=0.000000
parm5=1.000000
И при использовании других чисел, таких как parm4 = 0.8754 (просто пример), вывод меняется на очень странный:
parm1=1.000000
parm2=0.000000
parm3=-85443653999189573105674489609599978349239364506618107894018364220379126235920356559839098648677109228247196955211621648453249973580988416.000000
parm4=0.000000
parm5=1.000000
Есть идеи, что мне здесь не хватает?