日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boost rational有理数 tcy

發布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boost rational有理数 tcy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.1.下載 boost 庫地址:https://www.boost.org/ 壓縮文件boost_1_75_0.7z或下載boost_1_75_0-msvc-14.1-64.exe https://sourceforge.net/projects/boost/files/boost-binaries/1.75.0/ 1.2.說明:大多數的 boost 庫僅需要包含頭文件 hpp 即可,不需要再鏈接其他的 lib 文件,但是有些 boost 下的庫是需要包含 lib 文件的 1.2.我下載的是第一個,有理數庫不需要編譯只做簡單路徑設置將 boost 庫的路徑添加到附加包含目錄查看:https://blog.csdn.net/weixin_38102771/article/details/88410617VS2019 prew我的設置:C/C++-->包含目錄:C:\boost_1_75_0;(首先你應解壓拷貝到C:\)鏈接器-->附加庫目錄:C:\boost_1_75_0\libs;

2.實例

#include <boost\rational.hpp> #include <iostream>using namespace std; using namespace boost;template <typename T> bool isOdd(T value) { return (value & 1) == 1; }template <typename T> bool isEven(T value) { return (value & 1) == 0; } template <typename T> int sgn(T value) {if (value == 0) return 0;else if (value > 0) return 1;elsereturn -1; } template<typename T> bool isIntFlower(T value, T now) {return sgn(value)!=sgn(now); } template<typename T> rational<T> swapNumeratorDenominator(const rational<T>& v) {return rational<T>(v.denominator(),v.numerator()); }

實現自定義有理數Power函數

要求有理數數據類型為整數類型。?

template<typename T> rational<T> Power(const rational<T>& base, int exponent) {int exp = exponent;rational<T> result(0);if (result == base)return result;if (exp == 0)return rational<T>(1);if (exp>0)result = base;else{result = swapNumeratorDenominator(base);exp = abs(exp);}if (base < 0 && isEven(exp))result = abs(base);//開始計算T numerator= result.numerator(); //分子T denominator = result.denominator();//分母T old_num = numerator;T old_deno = denominator;T res1 = 1,res2=1;while (exp != 0){if ((exp & 1) == 1){res1 *= numerator;res2 *= denominator;}numerator *= numerator; // 翻倍denominator *= denominator; // 翻倍exp >>= 1; // 右移一位if (isIntFlower(old_num, res1) || isIntFlower(old_deno, res2))throw "int flower!"; }result = { res1,res2 };return result; } void test_Power() {cout << "10^4=" << Power<long long>(10, 4) << endl;//=10000 / 1cout << "10^-4=" << Power<long long>(10, -4) << endl;//= 1 / 10000cout << "(-10)^-4=" << Power<long long>(-10, 4) << endl;//= 10000 / 1cout << "(-10)^-4=" << Power<long long>(-10, -4) << endl;//= 10000 / 1cout << "(3/2)^2=" << Power<long long>(rational<long long>(3, 2), 2) << endl;//= 9 / 4cout << "(-3/2)^-2=" << Power<long long>(rational<long long>(3, 2), -2) << endl;// = 4 / 9cout << "(3/-2)^2=" << Power<long long>(rational<long long>(-3, 2), 2) << endl;//= 9 / 4cout << "(3/2)^2=" << Power<long long>(rational<long long>(3, -2), 2) << endl;//= 9 / 4cout << "(3/-2)^0=" << Power<long long>(rational<long long>(3, -2), 0) << endl;//= 1 / 1 } void test_rational() {using std::cout;//創建有理數rational<int> a1(0); //=0/1// 輸出一個既約分數的形式cout << "4/2=" << rational<int>(4, 2) << endl;//=2/1cout << "分子=" << a1.numerator() << endl; //分子=0cout << "分母=" << a1.denominator() << endl; //分母=1//修改值:a1 = { 2,4 }; //1/2a1 = 10; //=10/1a1.assign(3, 5); //=3/5//四則運算:const rational<int> x1{ rational<int>(-3, 2) };const rational<int> x2 = rational<int>(4, 2);cout << "x1+x2=" << x1 + x2 << endl;//=7/2cout << "x1-x2=" << x1 - x2 << endl;//-1/2cout << "x1*x2=" << x1 * x2 << endl;//=3/1cout << "x1/x2=" << x1 / x2 << endl;//=3/4cout << "|x1|=" << abs(x1) << std::endl;//轉浮點數:cout << "double=" << rational_cast<double>(x1) << endl;cout << "最大公約數=" << gcd(x1, x2) << endl;//=1/2cout << "最小公倍數" << lcm(x1, x2) << endl; //=6/1//需要轉化為double才可以用于pow/cos/sqrt等cout << pow(rational_cast<double>(x2), 2) << endl;cout << sqrt(rational_cast<double>(x2)) << endl;cout << cos(rational_cast<double>(x2)) << endl;//測試異常:rational<int64_t> b(1, 2);try {cout << b << endl;cout << "b/0=" << b / 0 << endl;}catch (bad_rational& e) {cout << e.what() << endl;//b/0=bad rational: zero denominator} } int main() {test_Power();test_rational(); }

?3.備注:Power實現原理

參考https://blog.csdn.net/qq_41822235/article/details/81777291非遞歸版本1.全面考察指數的正負、底數是否為零等情況。 2.寫出指數的二進制表達,例如13表達為二進制1101。 3.舉例:10^1101 = 10^0001*10^0*10^0100*10^1000。 4.通過&1和>>1來逐位讀取1101,為1時將該位代表的乘數累乘到最終結果。

?實例:

double Power(double base, int exponent) {bool isPositiveNum = true;double res = 1;if(exponent > 0);else if(exponent < 0){isPositiveNum = false;if(base==0)return 0;exponent = -exponent; //變成正數}else{if(base==0)return 0;return 1;}while(exponent!=0){if((exponent&1)==1)res*=base;base*=base; // 翻倍exponent>>=1;// 右移一位}return isPositiveNum == true ? res:(1 / res); }

?

總結

以上是生活随笔為你收集整理的boost rational有理数 tcy的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷亚洲五月色综合 | 久久成人资源 | www.夜夜骑| 亚洲国产精品999 | 在线射| 国产精品不卡在线观看 | 97狠狠操 | 成人夜色视频 | 欧美日韩免费观看视频 | 成人国产精品入口免费视频 | а中文在线天堂 | 日日夜夜国产精品 | 色窝窝无码一区二区三区 | 色哟哟日韩精品 | 亚州激情| 天天摸天天操天天射 | 国产福利在线免费观看 | 直接看毛片 | 三级网站免费看 | 亚洲视频在线观看一区二区三区 | 女同性做爰全过程 | 中文 日韩 欧美 | 在线观看av免费 | 人人妻人人爽一区二区三区 | 老师张开让我了一夜av | 天天综合网久久综合网 | 韩日三级视频 | 黄色免费网站在线看 | 国产91在线播放九色 | 在线你懂的 | 国产片久久 | 亚洲人和日本人hd | 欧美性啪啪 | 国产又白又嫩又爽又黄 | 狠狠的日| 国产精品爽 | 五月天婷婷激情视频 | 日本少妇一区二区三区 | 免费看欧美黑人毛片 | 影音先锋成人资源站 | 精品人妻一区二区三区麻豆91 | 久久精品无码Av中文字幕 | 国产精品视频无码 | 亚洲一区二区精品在线 | 成人影视免费观看 | 亚洲国产精品一区 | 精品一区不卡 | 国产婷婷精品 | 国精产品一区一区三区mba下载 | 久久艹这里只有精品 | 成人综合区 | av在线资源观看 | 亚洲天堂视频一区 | 成人免费看片载 | 日韩簧片在线观看 | 巨乳免费观看 | 天天天天天天天天干 | fc2成人免费视频 | 亚洲av不卡一区二区 | 国产66页 | 韩国午夜激情 | 99热91| 成年人免费网站在线观看 | 国产精品短视频 | 看特级黄色片 | 欧美日韩蜜桃 | 免费一级特黄特色大片 | 色妹av| 久久久久国产精品人妻 | 牛牛超碰| 性饥渴的农村熟妇 | 日本一区二区精品 | 七月婷婷综合 | 中文字幕国产 | 99久久免费看精品国产一区 | 曰本三级日本三级日本三级 | 99中文字幕在线观看 | 亚洲天堂h| 日韩欧美一区二区三区视频 | 精品人妻一区二区三区日产 | 东方成人av | 插插久久| 中文字幕人妻一区二区三区视频 | 亚洲色图欧美在线 | 操碰av| 国产综合婷婷 | 极品五月天 | 欧美专区在线播放 | 亚洲影院一区二区三区 | av在线日韩| 91好色先生| 午夜免费福利 | 能直接看的av网站 | 日韩成人精品一区二区三区 | 日本美女一区二区 | 欧美 亚洲 视频 | 久久亚洲欧洲 | 未满十八18禁止免费无码网站 | 啪啪自拍视频 |