Я пытаюсь перевести позорный fast inverse square root техника на язык программирования D из C. Необходимого шага включает в себя хранение длинных бит в целом:Тип каламбурный в D
i = * (long *) &y;
В разделе комментариев, Эндрю предлагает что эта операция называется типом punning. Кто-нибудь знает, как выполнить операцию кастомизации типа в D?
Для тех, кому любопытно, вот полный C представление кода:
float Q_rsqrt(float number) {
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * (long *) &y; // the part in question
i = 0x5f3759df - (i >> 1);
y = * (float *) &i; // again, but for floating points
y = y * (threehalfs - (x2 * y * y));
return y;
}
Вы пробовали делать то же самое в D, что и в C? Он должен работать ... (ну, кроме C long, немного отличается, вы должны использовать D 'int' для' float') –
Это отличное предложение. Я буду проверять и отвечать. Как люди обычно ссылаются на используемую операцию? –
@ AdamD.Ruppe К сожалению, синтаксис \ * ( \ *), похоже, вызывает ошибку синтаксического анализа. Вы случайно знаете название этой операции? –