提问人:Nadia 提问时间:10/12/2023 最后编辑:Remy LebeauNadia 更新时间:10/12/2023 访问量:102
无法摆脱 C++ 警告
Can't get rid of the C++ warning
问:
我是 C++ 的新手,这个警告让我发疯。
警告 C4244“argument”:从“double”转换为“int”,第 41 行可能丢失数据
该行是:
((x == 1) || (x == -1)) ? (result == sum(coeff, size, x)) : (true);
我已经检查了我的代码,它似乎与类型一致(就我而言)。我已经清除/重建解决方案,重新启动了几次 VS。
通过简单地删除部分线路,问题似乎就在这里:
(result == sum(coeff, size, x)
当我用其他任何东西替换它时,警告就会消失。除了这个警告,我没有其他警告。
有没有我不明白的细微差别?
这是我的完整代码:
int main() {
double x = -1;
const size_t size = 4;
double coeff[size] = {0};
cout << Horner(coeff, size, x);
return 0;
}
#include <iostream>
#include "header.h"
#include <cmath>
#include <cassert>
using namespace std;
void fillArray(double* coeff, size_t size)
{
srand(static_cast<unsigned int>(time(NULL)));
double lower_bound = 0;
double upper_bound = 100;
for (int i = 0; i < size; i++) {
coeff[i] = (rand() % 2001 - 1000) / 100.0;
}
for (int i = 0; i < size; i++) {
cout << "Coefficients: " << coeff[i] << " " << endl;
}
return;
}
double sum(double* coeff, size_t size, int sign)
{
size_t s = size;
double sum = 0;
for (int i = 0; i < size; i++) {
if (s % 2 == 1 || sign == 1) {
sum = sum + coeff[i];
} else sum = sum - coeff[i];
s--;
}
return sum; //sum is accurately calculated for x = -1 and x = 1
}
double Horner(double* coeff, size_t size, double x)
{
fillArray(coeff, size);
double term = coeff[0];
for (int i = 0; i < size - 1; i++) {
term = coeff[i + 1] + term * x;
}
double result = term;
((x == 1) || (x == -1)) ? (result == sum(coeff, size, x)) : (true);
return result;
}
答:
3赞
dsouzai
10/12/2023
#1
的定义是Horner
double Horner(double* coeff, size_t size, double x)
它作为第三个参数。的定义是double x
sum
double sum(double* coeff, size_t size, int sign)
它以 a 作为第三个参数。int
由于您要传入(即 ) 到 ,因此存在 to 类型转换。x
double
Horner
sum
double
int
评论
0赞
Nadia
10/12/2023
非常感谢您的帮助!该警告现已修复
2赞
R Sahu
10/12/2023
#2
有没有我不明白的细微差别?
编译器警告的提示是在调用 of 时使用的:x
sum
sum(coeff, size, x)
// ^^^
您可以通过使用类型的变量并适当设置其值来删除该警告。int
int sign = static_cast<int>(x);
然后使用sum(coeff, size, sign)
您也可以内联 .用。static_cast
sum(coeff, size, static_cast<int>(x))
免責聲明
发布的代码中还有其他逻辑问题,您可能需要单独解决。
评论
0赞
Nadia
10/12/2023
谢谢!你能指出这些问题吗
1赞
R Sahu
10/12/2023
@Nadia,雷米·勒博(Remy Lebeau)的第二条评论描述了我正在考虑的问题。
评论
true
((x == 1) || (x == -1)) ? (result == sum(coeff, size, x)) : (true);
sum()
result
==
double result = ((x == 1) || (x == -1)) ? sum(coeff, size, x) : term;
for (int i = 0; i < size - 1; i++) { term = coeff[i + 1] + term * x; }
for (int i = 1; i < size; i++) { term = coeff[i] + term * x; }