precision difference in matlab and gnu g++
5 ビュー (過去 30 日間)
古いコメントを表示
Hi all,
I have two short code examples which do the same. One is written in matlab the other in c++.
The result in matlab code is -2.168404344971009e-19.
The result in c++ code is -3.01755e-20
The difference in results is much toooo huge! What can I do?
Thanks in advance!
--- matlab code start ---
w = -0.00161579
rho = -3.23158e-05
gamma = 0.02
Igrad = 0.0004
w = w - rho * gamma / Igrad
--- matlab code end ---
--- c++ code start ---
#include <iostream>
int main() {
double w = -0.00161579;
double rho = -3.23158e-05;
double Igrad = 0.0004;
const double gamma = 0.02;
w = w - rho * gamma / Igrad;
std::cout << w << std::endl;
}
--- c++ code end ---
0 件のコメント
回答 (2 件)
Titus Edelhofer
2012 年 8 月 3 日
Hi,
not really: both answers are equally correct up to round off: the roundoff for the last difference is
eps(rho*gamma/Igrad)
which is in fact the answer MATLAB gives. Every answer that deviates from this by a maximum of 2.168e-19 is "correct".
Titus
0 件のコメント
DavidK
2012 年 8 月 3 日
2 件のコメント
Titus Edelhofer
2012 年 8 月 3 日
Again: everything in the interval [2* -2.168404344971009e-19 0] is equally correct.
Walter Roberson
2012 年 8 月 4 日
c++ does not use fixed-point arithmetic. c++ has the same roundoff problems that MATLAB has. It is possible, however, that in C++ the rounding mode is initialized differently.
参考
カテゴリ
Help Center および File Exchange で C Shared Library Integration についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!