Происходит деление на ноль
Эта проверка определяет, является ли правильный операнд операции деления или модуля нулевым.
#include <stdio.h>
void main() {
int x=2;
printf("Quotient=%d",100/(x-2));
}В этом примере знаменатель x-2 равно нулю.
Одной из возможных корректировок является проверка нулевого знаменателя перед делением.
В сложном коде трудно отслеживать значения и избегать нулевых знаменателей. Поэтому рекомендуется проверять нулевой знаменатель перед каждым делением.
#include <stdio.h>
int input();
void main() {
int x=input();
if(x>0) { //Avoid overflow
if(x!=2 && x>0)
printf("Quotient=%d",100/(x-2));
else
printf("Zero denominator.");
}
}for петля#include <stdio.h>
void main() {
int x=-10;
for (int i=0; i<10; i++)
x+=3;
printf("Quotient=%d",100/(x-20));
}В этом примере знаменатель x-20 равно нулю.
Одной из возможных корректировок является проверка нулевого знаменателя перед делением.
После нескольких итераций for цикл, трудно отслеживать значения и избегать нулевых знаменателей. Поэтому рекомендуется проверять нулевой знаменатель перед каждым делением.
#include <stdio.h>
#define MAX 10000
int input();
void main() {
int x=input();
for (int i=0; i<10; i++) {
if(x < MAX) //Avoid overflow
x+=3;
}
if(x>0) { //Avoid overflow
if(x!=20)
printf("Quotient=%d",100/(x-20));
else
printf("Zero denominator.");
}
}for петля#include<stdio.h>
void main() {
printf("Sequence of ratios: \n");
for(int count=-100; count<=100; count++)
printf(" %.2f ", 1/count);
}В этом примере: count от -100 до 100 - ноль. Когда count равно нулю, проверка Division by zero возвращает красную ошибку. Потому что чек возвращается зеленым в другом for выполнение цикла, / символ оранжевый.
Также имеется красная ошибка цикла Non-terminating в for цикл. Эта красная ошибка указывает на определенную ошибку в одном из циклов.
Одной из возможных корректировок является проверка нулевого знаменателя перед делением.
#include<stdio.h>
void main() {
printf("Sequence of ratios: \n");
for(int count=-100; count<=100; count++) {
if(count != 0)
printf(" %.2f ", 1/count);
else
printf(" Infinite ");
}
}for петля#include <stdio.h>
#include <math.h>
#define stepSize 0.1
void main() {
float divisor = -1.0;
int numberOfSteps = (int)((2.0*1.0)/stepSize);
printf("Divisor running from -1.0 to 1.0\n");
for(int count = 1; count <= numberOfSteps; count++) {
divisor+= stepSize;
divisor = ceil(divisor * 10.) / 10.; // one digit of imprecision
printf(" .2f ", 1.0/divisor);
}
}В этом примере: divisor от -1.0 до 1.0 - 0.0. Когда divisor равно 0,0, проверка Division by zero возвращает красную ошибку. Потому что чек возвращается зеленым в другом for выполнение цикла, / символ оранжевый.
Отсутствует красная ошибка шлейфа Non-terminating в for цикл. Красная ошибка не отображается, так как Polyspace ® аппроксимирует значения divisor на более широкий диапазон. Поэтому Polyspace не может определить, существует ли определенная ошибка в одном из запусков цикла.
Одной из возможных корректировок является проверка нулевого знаменателя перед делением. Для float переменные, не проверять, является ли знаменатель точно нулевым. Вместо этого проверьте, находится ли знаменатель в узком диапазоне вокруг нуля.
#include <stdio.h>
#include <math.h>
#define stepSize 0.1
void main() {
float divisor = -1.0;
int numberOfSteps = (int)((2*1.0)/stepSize);
printf("Divisor running from -1.0 to 1.0\n");;
for(int count = 1; count <= numberOfSteps; count++) {
divisor += stepSize;
divisor = ceil(divisor * 10.) / 10.; // one digit of imprecision
if(divisor < -0.00001 || divisor > 0.00001)
printf(" .2f ", 1.0/divisor);
else
printf(" Infinite ");
}
}| Группа: Числовые |
| Язык: C | C++ |
| Акроним: ЗДВ |
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.