📄 ln.hpp
字号:
// ln implementation -*- C++ -*-// Copyright (C) 2005 Ben T. Bear//// This file is part of the BTB's Template<Integer> Library. This// library is free software; you can redistribute it and/or modify it// under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful, but// WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// General Public License for more details.// You should have received a copy of the GNU General Public License// along with this library; see the file COPYING. If not, write to// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,// MA 02111-1307, USA.// As a special exception, you may use this file as part of a free// software library without restriction. Specifically, if other files// instantiate templates or use macros or inline functions from this// file, or you compile this file and link it with other files to// produce an executable, this file does not by itself cause the// resulting executable to be covered by the GNU General Public// License. This exception does not however invalidate any other// reasons why the executable file might be covered by the GNU General// Public License.#ifndef __bt2il_fn_ln_hpp#define __bt2il_fn_ln_hpp#include "fnem.hpp"namespace btil{ namespace fn { template <typename f> struct ln; struct __ln2; // value of ln2 template <int n> struct __ln2_item { static const double item = __ln2_item<n-1>::item / 9.0; static const double ln2_n = __ln2_item<n-1>::ln2_n + item / (2*n+1); }; template <> struct __ln2_item<0> { static const double item = 2.0 / 3.0; static const double ln2_n = item; }; struct __ln2 { static const double f_val = __ln2_item<25>::ln2_n; }; template <int n, typename x> struct __ln_item { static const double item = __ln_item<n-1, x>::item * -x::f_val; static const double ln_n = __ln_item<n-1, x>::ln_n + item / (n+1); }; template <typename x> struct __ln_item<0, x> { static const double item = x::f_val; static const double ln_n = item; }; template <typename f> struct ln { struct m { static const double f_val = fn2em<f, 2>::m::f_val / 2.0 - 1; }; struct value { static const double f_val = (__ln_item<60, m>::ln_n + __ln2::f_val * (fn2em<f, 2>::e+1)); }; }; }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -