Почему в столбце Х, при подсчёте не округляется до меньшего значения и не выводит 1 в 21 шаге? Как можно исправить это?
#include <iostream>
#include <cmath>
#include <iomanip>
#include <string>
float calculateExpression(float x) {
float result = 0;
result = log(abs(95 / 10) + 4) * (1 - 95 / cos(x - 95)) * (sin(x) / 95);
if (cos(x - 95) == 0 && sin(x) / 95 == 0 && log(abs(95 / 10) + 4) * (1 - 95 / cos(x - 95)) * (sin(x) / 95) < 0) {
std::string str = std::to_string(result);
std::cout << "Error" << std::setprecision(6) << std::fixed << result << std::endl;
}
int resultX = floor(result);
return resultX;
}
void printTable(float startX, float endX, float step) {
std::cout << std::right << std::string(10, ' ') << std::string(65, '-') << std::endl;
std::cout << std::right << std::setw(10) << "|" << " N " << std::right << std::setw(9) << " | " << std::right << std::setw(10) << std::right << std::setw(10)
<< " X " << std::right << std::setw(15) << " | " << std::right << std::setw(20) << " Expression " << std::right << std::setw(10) << " | " << std::endl;
std::cout << std::right << std::string(10, ' ') << std::string(65, '-') << std::endl;
int rowNum = 1;
float x = startX;
while (x <= endX) {
float expressionValue = calculateExpression(x);
std::cout << std::right << std::setw(10) << "|" << std::right << std::setw(3) << rowNum << std::right << std::setw(8) << "|" << std::right << std::setw(15)
<< std::setprecision(6) << x << std::right << std::setw(10) << "|" << std::right << std::setw(10) << std::fixed << std::setprecision(6) << expressionValue
<< std::right << std::setw(20) << "|" << std::endl;
rowNum++;
if (step > 0) {
x += step;
}
else {
x -= step;
}
std::cout << std::right << std::string(10, ' ') << std::string(65, '-') << std::endl;
}
}
int main() {
float startX = 0, endX = 0, step = 0;
std::cout << __cplusplus << std::endl; // Версия С++
std::cout << "Initial value for X: ";
std::cin >> std::fixed >> std::setprecision(6) >> startX;
std::cout << "Final value for X: ";
std::cin >> std::fixed >> std::setprecision(6) >> endX;
do {
std::cout << "Variable change step deltaX: ";
std::cin >> step;
} while (step == 0);
printTable(startX, endX, step);
return 0;
}