Я хочу создать тест C# sqrt, но некоторые функции sqrt требуют объединения для побитового вычисления.неназначенное поле в явном строчном макете
Мой союз определяется как это:
[StructLayout(LayoutKind.Explicit)]
struct U
{
[FieldOffset(0)]
public int i;
[FieldOffset(0)]
public float x;
}
и следующий код выдает незадействованную ошибку поля на u.i
:
U u;
u.x = x;
u.i = (1 << 29) + (u.i >> 1) - (1 << 22);
Я знаю, пользовательский интерфейс был назначен, когда УБ также назначается, так это можно игнорировать непризнанную ошибку поля во время компиляции без явного назначения u.i
?
Нет, вы не можете игнорировать. Просто добавьте его. Однако ... почему вы хотите, чтобы _emulate_ union в C#?!?! Работая с удвоениями, вы можете использовать битконвертер. С поплавками ... ну для теста я бы оставил назначение и просто вычислил 'sqrt()', дополнительное назначение для 'u.i' не будет измерено. Если вы действительно хотите это сделать, то идите медленным путем: http://stackoverflow.com/q/21801213/1207195 –
@AdrianoRepetti primary C function as union Я просто хочу реплицировать как C (ish), насколько это возможно. BitConverter кажется медленнее, чем базовый «эмулируемый»? но если это неправильно, я буду использовать его. Кстати, я согласен на дополнительное задание. –
Отметьте связанное сообщение, в принятом ответе есть доступ к памяти 'unsafe', должен быть таким же быстрым, как C' union' –