так низзя:
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i; //вот про это
...
`
в С тоже так нельзя...
Здесь есть корректная реализация с точки зрения современного С
Как корректная. Нельзя же вроде писать в union int, а читать float?
В C можно, в C++ нельзя
А если совместить Си и С++, то так можно?, функцию пометить как extern "C" и там union запилить, и эту функцию встроить в плюсы, так можно?
extern "C" не переключает язык, это исключительно про linkage
Но в стандарте говорится, что функции помеченные как extern "C", являются Си функциями
Прям так и говорится?)
По-моему это в плюсах нельзя, а в си можно
Нельзя и там и там. Просто Сшникам плевать
нет везде можно
Это не так В C можно
Да ладно...
Ну так докажи это
https://en.cppreference.com/w/c/language/union If the member used to access the contents of a union is not the same as the member last used to store a value, the object representation of the value that was stored is reinterpreted as an object representation of the new type (this is known as type punning).
Кто бы говорил:)
Обсуждают сегодня