Я написал следующую программу, предназначенную для сравнения float
на C++. Первоначально это было написано, пытаясь сравнить double
, но вскоре я понял, насколько плоха проблема. В общем, должно случиться, что программа должна сравнить два числа заданного массива slot
и поменять их по мере необходимости.Сравнение двойного в C++
#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
вместо поплавка, программа побежал бесконечно, пока я не должен был вызвать 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 . . .
Где идет не так логика?
EDIT: Поэтому после некоторого рассмотрения я пошел вперед и переписал программу, чтобы сравнить ее значения int
.
int slot[10] = {8, 3, 1, 5, 7, 10, 4, 9, 6, 2};
и регулировать все необходимые функции по мере необходимости: // Объявление функции: недействительным своп (ИНТ [], Int, Int);
недействительным своп (ИНТ данных [], Int я, 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
версии работают без проблем, но ни в double
ни float
версии делать?
Используйте отладчик и выполните пошаговый разбор. Убедитесь, что вы не получаете доступ за пределы. – vsoftco
ваша программа работает и производит идентичные результаты, если вы выполняете текстовый поиск и заменяете «float» на «double» –
@ManosNikolaidis. Может ли это быть моим компилятором, который генерирует ошибки? –