Как подсчитать десятичные точки, используя цикл for?

#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. Веб-сайт сообщает мне, что мне нужно еще пять минут, прежде чем я смогу это сделать