pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Matlab 與 C++ 雙精度

Matlab vs C++ Double Precision(Matlab 與 C++ 雙精度)
本文介紹了Matlab 與 C++ 雙精度的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在將一些代碼從 Matlab 移植到 C++.

I am porting some code from Matlab to C++.

在 Matlab 中

format long
D = 0.689655172413793 (this is 1.0 / 1.45)
E = 2600 / D
// I get E = 3.770000000000e+03

在 C++ 中

double D = 0.68965517241379315; //(this is 1.0 / 1.45)
double E = 2600 / D;
//I get E = 3769.9999999999995

這對我來說是個(gè)問題,因?yàn)樵趦煞N情況下我都必須四舍五入到 0(Matlab 的修復(fù)),在第一種情況下(Matlab)變成 3770,而在第二種情況下(C++)變成 3769.

It is a problem for me because in both cases I have to do rounding down to 0 (Matlab's fix), and in the first case (Matlab) is becomes 3770, whereas in the second case (C++) it becomes 3769.

我意識(shí)到這是因?yàn)?C++ 案例中另外兩個(gè)最低有效數(shù)字15".鑒于 Matlab 似乎只能以雙精度存儲(chǔ)多達(dá) 15 個(gè)有效數(shù)字的精度(如上所示 - 0.689655172413793),我如何有效地告訴 C++ 忽略后面的15"?

I realise that it is because of the two additional least significant digits "15" in the C++ case. Given that Matlab seems to only store up to 15 significant digits of precision in double precision (as shown above - 0.689655172413793), how can I effectively tell C++ to ignore the "15" at the back?

所有計(jì)算均以雙精度完成.

All calculations are done in double precision.

推薦答案

您對 C++ 和 MATLAB 打印雙精度值的不同方式感到困惑.MATLAB 的 format long 只打印15 有效數(shù)字,而 C++ 打印 17 有效數(shù)字.在內(nèi)部兩者使用相同的數(shù)字:IEEE 754 64 位浮點(diǎn)數(shù).為了在 MATLAB 中重現(xiàn) C++ 行為,我定義了一個(gè) 匿名函數(shù) disp17 打印 17 位有效數(shù)字的數(shù)字:

You got confused by the different ways C++ and MATLAB are printing double values. MATLAB's format long only prints 15 significant digits while C++ prints 17 significant digits. Internally both use the same numbers: IEEE 754 64 bit floating point numbers. To reproduce the C++-behaviour in MATLAB, I defined a anonymous function disp17 which prints numbers with 17 significant digits:

>> disp17=@(x)(disp(num2str(x,17)))

disp17 = 

    @(x)(disp(num2str(x,17)))

>> 1.0 / 1.45

ans =

   0.689655172413793

>> disp17(1.0 / 1.45)
0.68965517241379315

您在 MATLAB 和 C++ 中看到的結(jié)果是相同的,它們只是打印不同數(shù)量的數(shù)字.如果你現(xiàn)在繼續(xù)使用相同的常量在兩種編程語言中,你會(huì)得到相同的結(jié)果.

You see the result in MATLAB and C++ is the same, they just print a different number of digits. If you now continue in both programming languages with the same constant, you get the same result.

>> D = 0.68965517241379315 %17 digits, enough to represent a double.

D =

   0.689655172413793

>> ans = 2600 / D %Result looks wrong

ans =

     3.770000000000000e+03

>> disp17(2600 / D) %But displaying 17 digits it is the same.
3769.9999999999995

打印 17 或 15 位數(shù)字的背景:

The background for printing 17 or 15 digits:

  • Adouble 需要在不丟失精度的情況下存儲(chǔ) 17 個(gè)有效數(shù)字,這是 C 打印的內(nèi)容.
  • 對于最多 15 位數(shù)字,任何數(shù)字都可以從字符串轉(zhuǎn)換為雙精度字符串并返回原始數(shù)字,這正是 MATLAB 所做的.
  • A double requires 17 significant digits to be stored without precision loss, which is what C prints.
  • For up to 15 digits any number can be converted from string to double to string and results back in the original number, which is what MATLAB does.

這篇關(guān)于Matlab 與 C++ 雙精度的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數(shù)據(jù)?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環(huán): for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環(huán)?)
Reusing thread in loop c++(在循環(huán) C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環(huán)形?)
主站蜘蛛池模板: 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 山东包装,山东印刷厂,济南印刷厂-济南富丽彩印刷有限公司 | 液氮罐(生物液氮罐)百科-无锡爱思科 | 一级建造师培训_一建培训机构_中建云筑建造师培训网校 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 新疆散热器,新疆暖气片,新疆电锅炉,光耀暖通公司 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 阁楼货架_阁楼平台_仓库仓储设备_重型货架_广州金铁牛货架厂 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 |