⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func_cache.cpp

📁 这是一个神经网络开发包。目录ann下是专门针对神经网络的代码
💻 CPP
字号:
/*
 * public/ann/annfunc/func_cache.cpp
 * 2004-05-10 by ShanLanshan
 */
#include "public/ann/annbase.h"
#include "public/ann/annfunc/func_cache.h"

namespace ann {

		FuncCache::FuncCache(cache_func_t func)
		{
			assert(func != NULL);
			m_func = func;
			m_cache = NULL;
			m_low = m_high = 0.0;
			m_step = 0.01;
		}

		FuncCache::~FuncCache()
		{
			if (m_cache != NULL) {
				delete m_cache;
				m_cache = NULL;
			}
		}

		bool FuncCache::build_cache(ann_float low, ann_float high, ann_float step)
		{
			assert(high > low);
			assert(step != 0.0);

			int size;
			size = static_cast<int> ((high - low) / step);

			assert(size * sizeof(float) < MAX_ALLOC_SIZE);

			if (size > m_cache_size) {
				if (m_cache != NULL) {
					delete[] m_cache;
					m_cache = NULL;
				}

				m_cache = new ann_float[size * sizeof(ann_float)];
				assert(m_cache != NULL);
			}

			assert(m_func != NULL);
			for (int i=0; i<size; ++i) {
				m_cache[i] = m_func(low + step * i);
			}

			m_low = low;
			m_high = high;
			m_step = step;
			m_cache_size = size;

			return true;
		}

		ann_float FuncCache::operator () (ann_float v)
		{
			int idx;
			if (m_cache == NULL) {
				//printf("m_cache == NULL\n");
				assert(m_func != NULL);
				return m_func(v);
			}

			assert(m_step != 0.0);
			idx = static_cast<int> ((v - m_low) / m_step);

			if (idx >= m_cache_size || idx < 0) {
				assert(m_func != NULL);
				return m_func(v);
			}

			//printf("find table [%d]\n", idx);
			return m_cache[idx];
		}


} // namespace ann

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -