C++比较双倍

Comparing double in C++

本文关键字:比较 C++      更新时间:2023-10-16

我编写了以下程序,旨在比较float C++。最初这是试图比较double的,但我很快意识到这是一个多么糟糕的问题。通常,应该发生的是程序将比较给定slot数组的两个数字并根据需要交换它们。

#include<iostream>
using namespace std;
int swap(float[] , int, int);
int main() {
    float slot[10] = {8.25, 3.26, 1.20, 5.15, 7.99, 10.59, 4.36, 9.76, 6.29, 2.09};
    int n=10, i;
    int lower, upper, sortflag, sml, scan;
    lower = 0;
    upper = n-1;
    sortflag = 1;
    float temp;
    while( (lower < upper) && (sortflag == 1)) {
        sml = lower;
        sortflag = 0;
        scan = lower + 1;
        while(scan <= upper - lower) {
            if (slot[scan] > slot[scan + 1]) {
                swap(slot, scan, scan + 1);
                sortflag = 1;
                if(slot[scan] < slot[sml]) sml = scan;
            }
            scan++;
        }
    swap(slot, lower, sml);
    upper = upper - 1;
    lower = lower + 1;
    }
    cout << "AFTER SORT: " << endl;
    for (i= 0; i < n; i++) cout << slot[i] << " ";
    cout << endl;
    return 0;
}
void swap(float data[], int i, int j) {
    float temp;
    temp = data[i];
    data[j] = data[i];
    data[j] = temp;
}

当我使用 double 而不是 float 运行此程序时,该程序无限运行,直到我不得不调用 Ctrl+C 来破坏它。切换到float后,我得到以下输出:

AFTER SORT:
8.25 8.25 3.26 5.15 7.99 10.59 10.59 10.59 10.59 10.59
0 0 1 3 4 5 5 5 5 5
--------------------------------
Process exited after 0.06651 seconds with return value 0
Press any key to continue . . .

逻辑哪里出了问题?

编辑:因此,经过一番考虑,我继续重写程序以使其比较int数组值。

int slot[10] = {8, 3, 1, 5, 7, 10, 4, 9, 6, 2};

并根据需要调整了所有适当的功能: 功能声明: void swap(int[] , int, int(;

void swap(int data[], int i, int j( {

int temp;
temp = data[i];
data[i] = data[j];
data[j] = temp;
}

并且该函数现在使用正确的输入来正确。在这里越界没有问题。

AFTER SORT:
1 2 3 4 5 6 7 8 9 10

--------------------------------
Process exited after 0.05111 seconds with return value 0
Press any key to continue . . .

这是新修改的程序:

int main() {
    int slot[10] = {8, 3, 1, 5, 7, 10, 4, 9, 6, 2};
    int n=10, i;
    int lower, upper, sortflag, sml, scan;
    lower = 0;
    upper = n-1;
    sortflag = 1;
    while( (lower < upper) && (sortflag == 1)) {
        sml = lower;
        sortflag = 0;
        scan = lower + 1;
        while(scan <= (upper-lower)) {
            if (slot[scan] > slot[scan + 1]) {
                swap(slot, scan, scan + 1);
                sortflag = 1;
                if(slot[scan] < slot[sml]) sml = scan;
            }
            scan++;
        }
    swap(slot, lower, sml);
    upper = upper - 1;
    lower = lower + 1;
    }
    cout << "AFTER SORT: " << endl;
    for (i= 0; i < n; i++) cout << slot[i] << " ";
    cout << endl;
    //for (i= 0; i < n; i++) cout << index[i] << " ";
    cout << endl;
    return 0;
}
void swap(int data[], int i, int j) {
    int temp;
    temp = data[i];
    data[i] = data[j];
    data[j] = temp;
}

所以现在的问题是,为什么int版本可以正常工作,而doublefloat版本都没有?

你的交换函数是错误的。 data[j] = data[i]; 后跟另一个写data[j] = temp;时是无用的。应该是这样的

int swap(float data[], int i, int j) {
    float temp;
    temp = data[i];
    data[i] = data[j]; // reverse this line
    data[j] = temp;
    return 0;
}

如果您不使用结果,则使函数返回int是没有意义的。只需声明它void