Java c++;连分数输出错误

Java c++;连分数输出错误,java,c++,c++14,Java,C++,C++14,我编写了这段Java代码,效果非常好: static String getFraction(double x) { double limit = 1.0E-6; double h1 = 1, h2 = 0, k1 = 0, k2 = 1; double y = x; do { double a = Math.floor(y); double aux = h1;

我编写了这段Java代码,效果非常好:

static String getFraction(double x) {
        double limit = 1.0E-6;     
        double h1 = 1, h2 = 0, k1 = 0, k2 = 1;
        double y = x;

        do {

            double a = Math.floor(y);
            double aux = h1;
            h1 = a*h1+h2;
            h2 = aux;
            aux = k1;
            k1 = a*k1+k2;
            k2 = aux;
            y = 1/(y-a);

        } while (Math.abs(x-h1/k1) > x*limit );

        return ((int) h1) + "/" + ((int) k1);  
    }
它采用双精度(6.45)并使用连分数(129/20)返回其分数表示形式。这是C++代码:

 void calc(double x) {

    double limit = 1.0E-6;     
    double h1 = 1, h2 = 0, k1 = 0, k2 = 1;
    double y = x;

    do {

        double a = floor(y);
        double aux = h1;
        h1 = a*h1+h2;
        h2 = aux;
        aux = k1;
        k1 = a*k1+k2;
        k2 = aux;
        y = 1/(y-a);

    } while (abs(x-h1/k1) > x*limit );

    std::cout << (h1) << "/" << (k1) << std::endl;  
 }

有什么想法吗?我是否必须将某些内容静态强制转换为双精度以允许浮点操作?

该函数返回一个
int
,该值将为
0
。如果要使用或,则后者对整型和浮点型都有重载

该函数返回一个
int
,它将是
0
。如果要使用或,则后者对整型和浮点型都有重载

问题在于
abs()
函数。我过去也有过类似的问题。请看以下代码:

int main() {
  std::cout << abs(-85.5) << std::endl;
}

问题在于
abs()
功能。我过去也有过类似的问题。请看以下代码:

int main() {
  std::cout << abs(-85.5) << std::endl;
}

事实上,我首先制作了C++版本,我浪费了很多时间。然后我尝试了Java,它成功了。我不能理解我在C++部分哪里错了!您是否在执行过程中使用调试器逐步完成了代码?如果我将“我猜,这是因为java和C++实现之间浮点格式的不同。但这并不是一个真正的答案。有一个著名的用户,所以谁喜欢Burman,这可能是希望回答。事实是,我生产了一个C++版本第一,我“浪费”了很多时间。然后我尝试了Java,它成功了。我不能理解我在C++部分哪里错了!您是否在执行过程中使用调试器逐步完成了代码?如果我将“我猜,这是因为java和C++实现之间浮点格式的不同。但这并不是一个真正的答案。SO上有一位杰出的用户,他喜欢Birmans,这可能是一个很有希望的答案。请告诉我,有什么人会对这一点投反对票?@Storytler:我没有,但我认为这个答案是错的<代码>标准::abs(双精度)返回双精度
std::abs(int)
返回int。OP显然通过了double。@Jaa-c-
std::abs
可以,而
::abs
不能。看看OP的代码。我很确定它们包含了
math.h
而不是
cmath
@StoryTeller:哦,我错过了。
std:
前缀是由一位编辑添加的,并且使答案不正确,我刚刚删除了它们。请问,有什么原因可以让任何人对此投反对票?@StoryTeller:我没有,但我觉得这个答案错了<代码>标准::abs(双精度)返回双精度
std::abs(int)
返回int。OP显然通过了double。@Jaa-c-
std::abs
可以,而
::abs
不能。看看OP的代码。我很确定它们包含了
math.h
而不是
cmath
@StoryTeller:哦,我错过了。
std::
前缀是由编辑添加的,导致答案不正确,我刚刚删除了它们
double c;

do {

  double a = floor(y);
  double aux = h1;
  h1 = a*h1+h2;
  h2 = aux;
  aux = k1;
  k1 = a*k1+k2;
  k2 = aux;
  y = 1/(y-a);

  if ((x-h1/k1) >= 0)
    c = x-h1/k1; 
  else
    c = -(x-h1/k1);

} while (c > x*limit );