All streams
Search
Write a publication
Pull to refresh
286
0
Владимир @32bit_me

Программист

Send message
INT_MAX — это максимальное значение (знакового) целого, это очень просто: http://www.cplusplus.com/reference/climits/
Если интерпретировать выражение (size > size+1) буквально, то оно равно true для любого значения, кроме INT_MAX, т.к. INT_MAX + 1 = INT_MIN из-за конечности разрядной сетки.
Но в силу того, что по стандарту переполнение знакового целого — это UB, оптимизатор заменит выражение в скобках на константу true.
Результат этой операции: (float*)pa; не определён в соответствии со стандартом.
Правильно так, например:
int i = 1;
float res;
memcpy(&res, &i, sizeof i);
Ни одно из них не определено, об этом недавно писали на хабре и вот есть ссылка на эту тему: youtu.be/ACW-7dktyDk
Правильно делать через memcpy, оптимизирующий компилятор сам удалит ненужный вызов функции.
Я не уверен, что это будет интересно Крису Латтнеру.
Как я понял, PureFPGA автор называет реализацию на Verilog/VHDL, в противоположность трансляции с языка С.
О, если я буду работать с cuda 8 + msvc14, то обязательно это учту :)
Кстати, вы могли бы привести пример того, что при этом происходит.
Вставил в статью ссылку на ваше видео по алиасингу.
В данном случае проще написать
return -num;

Основные компиляторы для основных платформ с этим справятся, это действительно так. Но в целом, есть случаи, когда нам необходимо сделать преобразование float в его битовое придставление, и работать непосредственно с ним.
Код приведен просто для примера, чтобы показать, что компилятор на самом деле довольно умный.
Но его можно не указывать!
На самом деле, для микроконтроллеров и других устройств без fpu операции манипулирования битами могут сильно оптимизировать скорость исполнения, и отказываться от них не следует. Подобные ограничения могут сильно усложнить дело.
Если не вдаваться в ккаие-то теоретические дебри стандарта и чисто гипотетические случаи, то это ничем не чревато. Если используется стандарт IEEE754, то эта функция изменит знак числа. Я проверил генерацию кода на gcc и clang для основных платформ (x86 и ARM) и всё компилируется правильно.
Если вы про gcc4.4.7 -m32 -strict-aliasing, то эта проблема проявляется исключительно в этой конкретной версии компилятора, и нигде более. Вот тут я немного написал про это: 32bit-me.livejournal.com/174869.html
Разработчики Rust пишут, что улучшение работы с IDE — это главная задача: https://www.rust-lang.org/ru-RU/contribute-tools.html. Так что будем надеяться.
Это не так. Я проверял :)
Если я приду на собеседование и начну сомневаться в себе, то итог абсолютно предсказуем.
Достаточно симулировать наше восприятие

Достаточно симулировать только моё восприятие, например. И включать в него такие статьи.
Каждый сам должен заботиться о своей самореализации, если ему это нужно.

Information

Rating
Does not participate
Date of birth
Registered
Activity