gpt4 book ai didi

java - C++连续分数输出错误

转载 作者:行者123 更新时间:2023-11-27 23:49:16 24 4
gpt4 key购买 nike

我编写了这段运行良好的 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);
}

它采用 double (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;
}

在我看来,C++ 翻译与 Java 版本相同。问题是这个输出:

Java (input 6.45) --> 129/20
C++ (input 6.45) --> 6/1

有什么想法吗?我是否必须将某些内容静态转换为 double 以允许浮点运算?

最佳答案

abs函数返回一个 int,它将是 0。你想使用 fabsstd::abs ,后者对整型和浮点类型都有重载。

关于java - C++连续分数输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com