#c
#c
Вопрос:
Я впервые имею дело с десятичными точками в C , и мне было интересно, хочу ли я, чтобы цикл for увеличивался на 0,01 на 0,01 вместо 1,0 на 1,0, что я могу сделать. Я пробовал это, но, очевидно, это не сработало.
#include <iostream>
using namespace std;
int main(){
double i;
for (i=1.5;i<1.68;i );
cout<<i;
system("pause");
return 0;
}
Как я могу это сделать?
Заранее благодарю вас.
Комментарии:
1. Будьте осторожны с этим: арифметика с плавающей запятой неточна .
2. знак прав, я бы рекомендовал умножить ваши границы на 100, если вам нужно 2 числа после запятой.
3. Для приращений на 0,1 у вас есть 1,5, затем ~ 1,6 (это неточно), затем ~ 1,7, что, безусловно, не пройдет тест <1,68, несмотря на неточность: каждое из добавлений .1 может быть неточным только на уровне 15-17 значащих цифр
double
, поэтому две операции не могут накапливать ошибку, приближающуюся к 0,02по величине. Скажем, увеличение на 0,01 — вы уверены, что не хотели этого делать, учитывая значение 1,68? — тогда у вас возникнет серьезная проблема — самое простое решение для проверки< 1.685
, поскольку известна ошибка <0.005.4. Проблема с этим подходом заключается в том, что любой, кто смотрит на код, может задаться вопросом о дополнительной цифре и о том, означает ли это, что вы предполагали меньшее приращение (так же, как 1.68, предлагающий приращения 0.01, вызвал мой запрос выше). Вы можете разделить величину приращения на другую переменную, а затем иметь
i < 1.68 increment/2
, но она все еще хрупкая — что, если приращение составило 0,1, а исходное значение было 1,65 — вы увеличиваете его до 1,7, тогда неточность имеет значение. Поэтому важно убедиться, что вы тестируете значение, кратное приращению начального значения, или используйте int …
Ответ №1:
for (i = 1.5;i < 1.68;i = i 0.1)
cout << i << endl;
после не будет ;
for loop
, иначе оно станет a statement
и не будет работать корректно..
floating points
природа неожиданна, поэтому иногда это становится головной болью из-за точности loss..so старайтесь избегать их использования в цикле .. всегда старайтесь использовать integer
в a loop
..
итак, вот еще один ответ, и он лучше, чем указано выше, и менее подвержен любым неожиданным результатам
int i;
for (i = 150;i < 168;i = 10) {
cout << i / 100.0 << endl;
}
Ответ №2:
Попробуйте это:
#include <iostream>
using namespace std;
int main(){
int i;
for (i=150;i<168;i =10)
{
double d=i/100.0;
cout<<d;
}
system("pause");
return 0;
}
Одна из ошибок в вашем коде for (i=1.5;i<1.68;i );
— «;» после «)». Это означает, что этот цикл ничего не делает. Т.Е. Следующая строка cout<<i;
не находится внутри тела цикла.
Комментарии:
1. Веб-сайт сообщает мне, что мне нужно еще пять минут, прежде чем я смогу это сделать