Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
steve02081504 committed Oct 24, 2023
1 parent 0062c7e commit 386118b
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ namespace magic_number{
constexpr auto gold_of_resize=gold+1;//精度2000——大概

/*! 圆周率. */
constexpr auto pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009;//精度2000
constexpr auto π = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009;//精度2000

/*! 自然对数的底数. */
constexpr auto e = 2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901157383418793070215408914993488416750924476146066808226480016847741185374234544243710753907774499206955170276183860626133138458300075204493382656029760673711320070932870912744374704723069697720931014169283681902551510865746377211125238978442505695369677078544996996794686445490598793163688923009879312773617821542499922957635148220826989519366803318252886939849646510582093923982948879332036250944311730123819706841614039701983767932068328237646480429531180232878250981945581530175671736133206981125099618188159304169035159888851934580727386673858942287922849989208680582574927961048419844436346324496848756023362482704197862320900216099023530436994184914631409343173814364054625315209618369088870701676839642437814059271456354906130310720851038375051011574770417189861068739696552126715468895703503540212340784981933432106817012100562788023519303322474501585390473041995777709350366041699732972508868769664035557071622684471625607988265178713419512466520198918006308407507245458379639351364421067750539471789004518357551541252235905906872648786357525419112888773717663748602766063496035367947026923229718683277173932361920077745221262475186983349515101986426988784717193966497690708252174233656627259284406204302141137199227852699846988477023238238400556555178890876613601304770984386116870523105531491625172837327286760072481729876375698163354150746088386636406934704372066886512756882661497307886570156850169186474885416791545965072342877306998537139043002665307839877638503238182155355973235306860430106757608389086270498418885951380910304235957824951439885901131858358406674723702971497850841458530857813391562707603563907639473114554958322669457024941398316343323789759556808568362972538679132750555425244919435891284050452269538121791319145135009938463117740179715122837854601160359554028644059;//精度2000
Expand Down
44 changes: 23 additions & 21 deletions parts/header_file/files/elc/_files/base_defs/math.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -435,15 +435,17 @@ namespace math{
return sqrt_to_new_ε(num,v,ε,ε_saver);
}
template<float_type T>
[[nodiscard]]inline constexpr T quick_sqrt(const T&v)noexcept{if constexpr(BIT_POSSIBILITY==2)// evil floating point bit level hacking
if(!in_consteval)//编译期计算不能使用union_cast,让编译器慢慢算去吧
if constexpr(is_big_type<T>)
return quick_sqrt(static_cast<long double>(v));
else{
using namespace basic_environment::float_infos;
return union_cast<T>((union_cast<data_type<T>>(v)>>1) + (data_type<T>(exponent_diff<T>) << (precision_base_bit<T> - 1)));
}
[[nodiscard]]inline constexpr T quick_sqrt(const T&v)noexcept{
if constexpr(BIT_POSSIBILITY==2)// evil floating point bit level hacking
if(!in_consteval)//编译期计算不能使用union_cast,让编译器慢慢算去吧
if constexpr(is_big_type<T>)
return quick_sqrt(static_cast<long double>(v));
else{
using namespace basic_environment::float_infos;
return union_cast<T>((union_cast<data_type<T>>(v)>>1) + (data_type<T>(exponent_diff<T>) << (precision_base_bit<T> - 1)));
}
return v/2u;
//return reciprocal(quick_invsqrt(v));
}
template<float_type T>
[[nodiscard]]inline constexpr T sqrt(const T&v,const to_unsigned_t<T>&ε,to_unsigned_t<T>&ε_saver)noexcept{
Expand Down Expand Up @@ -932,7 +934,7 @@ namespace magic_number{
using ::std::move;

template<unsigned_big_float_type T>
struct pi_with_ε_impl_t{
struct π_with_ε_impl_t{
private:
typedef to_signed_t<T> float_t;
typedef to_unsigned_t<T> ufloat_t;
Expand All @@ -953,7 +955,7 @@ namespace magic_number{
size_t base_accurate = 0,sqrt_accuracy_multiplier = 1;//考虑到sqrt_iteration每次都会精度翻倍,而base_iteration每次只会精度增加14,所以我们可以通过追加这个值来省去一些不必要的sqrt迭代

public:
constexpr pi_with_ε_impl_t(ufloat_t the_ε = magic_number::god)noexcept: ε(move(the_ε)){}
constexpr π_with_ε_impl_t(ufloat_t the_ε = magic_number::god)noexcept: ε(move(the_ε)){}
[[nodiscard]]constexpr T take_value()noexcept{
return abs(reciprocal(12u*result/sqrt_640320));
}
Expand Down Expand Up @@ -1004,14 +1006,14 @@ namespace magic_number{
}
};
template<unsigned_float_type T>
distinctive inline pi_with_ε_impl_t<T> pi_with_ε_impl{};
distinctive inline constexpr struct pi_with_ε_t{
distinctive inline π_with_ε_impl_t<T> π_with_ε_impl{};
distinctive inline constexpr struct π_with_ε_t{
template<unsigned_big_float_type T>
static auto&_impl = pi_with_ε_impl<to_unsigned_t<remove_cvref<T>>>;
static auto&_impl = π_with_ε_impl<to_unsigned_t<remove_cvref<T>>>;
template<float_type T>
auto operator()(T&&ε)const noexcept{
if constexpr(is_basic_float_type<T>)
return (T)magic_number::pi;//啊?
return (T)magic_number::π;//啊?
else
return _impl<T>(forward<T>(ε));
}
Expand All @@ -1026,9 +1028,9 @@ namespace magic_number{
};
template<unsigned_big_float_type T>
static constexpr auto for_type = for_type_t<T>{};//这个是为了让用户可以自己调用do_iteration等函数
}pi_with_ε{};
}π_with_ε{};
}
using magic_number::pi_with_ε;
using magic_number::π_with_ε;

namespace math{
template<signed_float_type T>
Expand All @@ -1052,11 +1054,11 @@ namespace math{
[[nodiscard]]constexpr T arctan(T num, const to_unsigned_t<T>&ε)noexcept{
/*
arctan (-x) = -arctan(x)
arctan (1/x) = 0.5 * pi - arctan(x) [x > 0]
arctan (1/x) = 0.5 * π - arctan(x) [x > 0]
*/
if constexpr(signed_type<T>)
if (num < 0) return -arctan(abs(num), ε);
if (num > 1) return pi_with_ε(ε)/2u - arctan(reciprocal(move(num)), ε);
if (num > 1) return π_with_ε(ε)/2u - arctan(reciprocal(move(num)), ε);

size_t i = 1; bool negation = false; // 取反
to_signed_t<T> result = num;
Expand All @@ -1077,7 +1079,7 @@ namespace math{

template<signed_float_type T>
[[nodiscard]]constexpr T cos(T num, const to_unsigned_t<T>&ε)noexcept{
return sin(pi_with_ε(ε)/2u - num, ε);
return sin(π_with_ε(ε)/2u - num, ε);
}
template<signed_float_type T> requires(has_ε<T>)
[[nodiscard]]force_inline constexpr T cos(T num)noexcept{
Expand Down Expand Up @@ -1122,7 +1124,7 @@ namespace math{

template<signed_float_type T>
[[nodiscard]]constexpr to_unsigned_t<T> arccos(T num, const to_unsigned_t<T>&ε)noexcept{
return to_unsigned_t<T>(pi_with_ε(ε)/2u - arctan(num, ε));
return to_unsigned_t<T>(π_with_ε(ε)/2u - arctan(num, ε));
}
template<signed_float_type T> requires(has_ε<T>)
[[nodiscard]]force_inline constexpr to_unsigned_t<T> arccos(T num)noexcept{
Expand All @@ -1140,7 +1142,7 @@ namespace math{

template<signed_float_type T>
[[nodiscard]]constexpr to_unsigned_t<T> arccot(T num, const to_unsigned_t<T>&ε)noexcept{
return to_unsigned_t<T>(pi_with_ε(ε)/2u - arctan(num, ε));
return to_unsigned_t<T>(π_with_ε(ε)/2u - arctan(num, ε));
}
template<signed_float_type T> requires(has_ε<T>)
[[nodiscard]]force_inline constexpr to_unsigned_t<T> arccot(T num)noexcept{
Expand Down

0 comments on commit 386118b

Please sign in to comment.