缩小从 double 到 float 的转换
Narrowing conversion from double to float
这段代码有一个整洁的错误。
错误指出:Narrowing conversion from 'double' to 'float'
在 xPos() 中显示 x_pos;函数在底部。
谁能解释这是为什么以及如何纠正它?
//grab the current position
double x_pos = clownfish->xPos();
// move the fish 500pixels/sec in the right direction
// delta time is measured in milliseconds, so divide by 1000 and multiply
x_pos += 500 * (game_time.delta.count() / 1000.f);
// update the position of the clown fish
clownfish->xPos(x_pos);
警告消息说明了问题所在:“"Narrowing conversion from 'double' to 'float'"。cpp core guidelines 解释了为什么这可能是一个问题。
据推测,clownfish->xPos
函数采用浮点参数。将函数更改为取双精度以避免丢失精度。或者对 x_pos
使用 float,这样就不会丢失精度。更一般地说,不要随便混合使用 float 和 double。
Can someone explain why that is and how to correct it?
缩小:Float 小于 double,类似于 int8_t 小于 int16_t。最大的 float 比最大的 double 小很多。
另请注意:较小的整数会自动神奇地提升为较大的整数。同样,您的编译器也没有抗议 "double x_pos = clownfish->xPos();",double 总是大到足以包含 float。
纠正方法:
如果您确信 float(较小的)足以满足您的需求,或者您不允许更改小丑鱼代码,那么您可以考虑使用强制转换。
clownfish->xPos(static_cast<float>(x_pos)).
如果您愿意并且不禁止更改小丑鱼代码,请确保小丑鱼的 x 位置(即什么 "clownfish->xPos()" returns)是双精度数,并且函数 "clownfish->xPos()" returns一个双。
这段代码有一个整洁的错误。
错误指出:Narrowing conversion from 'double' to 'float'
在 xPos() 中显示 x_pos;函数在底部。
谁能解释这是为什么以及如何纠正它?
//grab the current position
double x_pos = clownfish->xPos();
// move the fish 500pixels/sec in the right direction
// delta time is measured in milliseconds, so divide by 1000 and multiply
x_pos += 500 * (game_time.delta.count() / 1000.f);
// update the position of the clown fish
clownfish->xPos(x_pos);
警告消息说明了问题所在:“"Narrowing conversion from 'double' to 'float'"。cpp core guidelines 解释了为什么这可能是一个问题。
据推测,clownfish->xPos
函数采用浮点参数。将函数更改为取双精度以避免丢失精度。或者对 x_pos
使用 float,这样就不会丢失精度。更一般地说,不要随便混合使用 float 和 double。
Can someone explain why that is and how to correct it?
缩小:Float 小于 double,类似于 int8_t 小于 int16_t。最大的 float 比最大的 double 小很多。
另请注意:较小的整数会自动神奇地提升为较大的整数。同样,您的编译器也没有抗议 "double x_pos = clownfish->xPos();",double 总是大到足以包含 float。
纠正方法:
如果您确信 float(较小的)足以满足您的需求,或者您不允许更改小丑鱼代码,那么您可以考虑使用强制转换。
clownfish->xPos(static_cast<float>(x_pos)).
如果您愿意并且不禁止更改小丑鱼代码,请确保小丑鱼的 x 位置(即什么 "clownfish->xPos()" returns)是双精度数,并且函数 "clownfish->xPos()" returns一个双。