Я нашел следующий код в книге Кристофера Ттрембля «Математика для игровых программистов». это выглядит как C++, и он делает кучу ссылок на сравнения производительности в stllib код дается как таким образом:перевод c/C++?
float Exp2(float X)
{
float Result, Square, IntPow;
if (X < 0) {
const unsigned long IntVal = *(unsigned long *)&X & 0x7FFFFFFF;
const unsigned long Int = (IntVal >> 23) - 127;
if ((long)Int > 0) {
*(unsigned long *)&IntPow = ((((IntVal & 0x007FFFFF) |
0x00800000) >> (23 - Int)) + 127 + 1) << 23;
*(unsigned long *)&X = (((IntVal << Int) & 0x007FFFFF)
| 0x3F800000);
X = 2.0f - X;
} else {
IntPow = 2.0f;
X++;
}
Result = X0CoEff + Square * X1CoEff;
Square *= X; // The 2 last lines are repeated for every coeff.
Result += Square * XiCoEff;
...
return Result/IntPow;
} else {
const unsigned long IntVal = *(unsigned long *)&X;
const unsigned long Int = (IntVal >> 23) - 127;
if ((long)Int > 0) {
*(unsigned long *)&IntPow = ((((IntVal & 0x007FFFFF) |
0x00800000) >> (23 - Int)) + 127) << 23;
*(unsigned long *)&X = (((IntVal << Int) & 0x007FFFFF)
| 0x3F800000);
X—;
} else
IntPow = 1.0f;
Square = X;
Result = X0CoEff + Square * X1CoEff;
Square *= X; // The 2 last lines are repeated for every coeff.
Result += Square * XiCoEff;
...
return Result * IntPow;
}
}
float log2(float X)
{
float Result, Square;
Result = (float)((*(unsigned long *)&X) >> 23) - 127 + x0CoEff;
*(unsigned long *)&X = (*(unsigned long *)&X & 0x007FFFFF) | 0x3F800000;
Square = X;
Result += Square * XiCoEff;
Square *= X; // The 2 last lines are repeated for every coeff.
...
return Result;
}
вещи я никогда не узнал, битовые операции (который я думаю, что происходит здесь, а если нет, то я еще никогда не занимался шестью в своих назначениях кодирования). если кто-то может пройти и, возможно, поможет либо комментировать, либо перевести это на более высокий уровень c/C++ для понимания.
книга объясняет, что они должны быть оптимизированы версии функций по сравнению с stllib, но как вы можете увидеть код не очень хорошо документирован (эти строки, где скопированные посимвольно)
Что вы имеете в виду? Это уже высокий уровень! : P – scientiaesthete
@scientiaesthete ok, возможно, высокий уровень был неправильным термином, но я имею в виду, что это больше похоже на то, что он не работает с битами, но что происходит со значениями, хранящимися этими битами. – gardian06
Это куча арифметической магии. Что сказал Олекси. – scientiaesthete