#ifndef __fast_inv_sqrt_h__
#define __fast_inv_sqrt_h__
#include <cassert>
#include <stdint.h>
/**
* Fast approximation of the inverse square root
* (http://en.wikipedia.org/wiki/Fast_inverse_square_root)
*
* @param x
* 32-bit floating point (IEEE 754-2008)
* @return the approximated inverse square root of x
*/
inline float InvSqrt(float x) {
assert( sizeof(x) == 4 );
assert( x >= 0 );
union {
uint32_t i;
float y;
};
y = x;
i = 0x5f375a86 - (i >> 1);
/* Approximation step */
return y * (1.5f - 0.5f * x * y * y);
/* One step more of the Newton's method */
}
#endif /*_fast_inv_sqrt_h__*/
Мнения, высказанные здесь, отражают мои личные взгляды. И мнения и взгляды со временем могут меняться.
вторник, 27 июля 2010 г.
Алгоритм приближённого вычисления квадратного корня
Об уязвимостях в приложениях
Виды уязвимостей приложений:
- Уязвимости в правах доступа к приложению
- Уязвимости в коде форматирования строк
- Уязвимости при работе с общими ресурсами
- Ошибки при вычислении размеров буферов
- Ошибки в работе приложения при исчерпании внешних ресурсов или динамической памяти
- Ошибки в работе приложения с внешними ресурсами или динамической памятью
Факторы усиливающие уязвимости:
- Фиксированное расположение (layout) программы в памяти
- Избыточные права доступа у приложения
Цели атак:
- Внедрение новой функции в приложение
- Нарушение работы приложения
- Получение информации из приложения
- Атака или подготовка атаки на иное приложение
Как правило, чтобы получить управление в коде приложения:
- Перезаписывают стек
- Перезаписывают управляющие секции
суббота, 24 июля 2010 г.
Требования к системному языку программирования
(навеяно http://apenwarr.ca/log/?m=201007#21)
- Реализация любой идеи на новом языке должна быть не сложнее её реализации на языке C
- Должная быть возможность напрямую вызывать подпрограммы на C и ASM
- Должны быть детерминированные конструкторы и деструкторы (RAII)
- Нужна поддержка таблиц виртуальных методов
- Не должно быть отдельных заголовочных файлах (import вместо include)
- Не должно быть динамической типизации
- Не должно быть встроенного в язык сборщика мусора
Не должно быть встроенной в язык системы нитей исполнения- Не должно быть намертво встроенной в язык стандартной библиотеки
- Исключения: либо управляемые, либо отсутствуют
- Сложные типы должны всегда передоваться внутрь функции по ссылке
- Синтаксис работы с указателями должен быть таким же как и синтаксис работы со ссылками
- Нужна поддержка преобразований типов (type casting) определяемых пользователями
- Нужна поддержка обобщенных типов
- Нужна поддержка анонимных функций
- Нужна поддержка перегрузки операторов
понедельник, 19 июля 2010 г.
О сочетаниях цветов
Код на jscript для проверки сочетания цветов на ``читабельность'':
function color_brightness(red, green, blue) {
return 0.299 * red + 0.587 * green + 0.114 * blue;
}
function color_is_good(bg_red, bg_green, bg_blue,
fg_red, fg_green, fg_blue) {
var brightness_diff = Math.abs(
color_brightness(bg_red, bg_green, bg_blue) -
color_brightness(fg_red, fg_green, fg_blue));
var color_dirr =
Math.abs(bg_red - fg_red) +
Math.abs(bg_green - fg_green) +
Math.abs(bg_blue - fg_blue);
return (brightness_diff > 0.490 && color_dirr > 1.961);
}
четверг, 1 июля 2010 г.
Задача на "правильную" запись
Дано множество:
и определена функция:
Определим следующее множество:
Для того, чтобы на этом множестве выполнялось следующее условие:
необходимо и достаточно, чтобы
Предполагается, что если эти утверждения переписать "правильно", то можно увидеть что-то!
и определена функция:
Определим следующее множество:
Для того, чтобы на этом множестве выполнялось следующее условие:
необходимо и достаточно, чтобы
Предполагается, что если эти утверждения переписать "правильно", то можно увидеть что-то!
Подписаться на:
Сообщения (Atom)