codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <cmath> #include <cstdio> #include <cstdlib> #include <ctime> template <int power> double Power(double base); template <int mod_2> struct Better { }; template <> struct Better<0> { template <int power> static double Power(double base) { return ::Power<2>(::Power<power / 2>(base)); } }; template <> struct Better<1> { template <int power> static double Power(double base) { return ::Power<power - 1>(base) * base; } }; template <int power> double Power(double base) { static const int new_power = power < 0 ? -power : power; return Better<new_power % 2>::template Power<new_power>(power < 0 ? 1.0 / base : base); } template <> double Power<0>(double base) { return 1.0; } template <> double Power<1>(double base) { return base; } template <> double Power<2>(double base) { return base*base; } int main(void) { srand((unsigned) time(NULL)); float num = 1.0f + 0.001f * (rand() % 512 / 256.0f - 1); printf("%f\n", num); printf("%f\n", Power<-997>(num)); printf("%f\n", pow(num, -997)); return 0; }
Private
[
?
]
Run code
Submit