C++:导致数字在成功某个值时溢出并从零开始?

标签 c++ math numbers

假设我有一个名为 foo 的 float 。 foo 以一定的间隔增加或减少。一旦 foo 成功达到指定的数字/,我怎样才能让 foo 再次从零开始,而对于递减则相反?

例如:

int max = 0;
int min = 50;
float foo = 45;
foo += 7.5;

foo 现在是 52.5。但由于我在最大数量上指定了 50,我希望它在那个点溢出,以便结果仅为 2.5。

或者:

int min = 0;
int max = 50;
float foo = 45;
foo += 108.3;

结果应该是 3.3。刚溢出3次。

反之:

int min = 0;
int max = 50;
float foo = 1;
foo -= 5.5;

结果为 -4.5,但应为 44.5。

我在想也许这样的事情可以解决问题:

foo = foo % max;
if (foo <0)
    foo+=max;

但 % 仅适用于整数,包括一个库只是为了获得 fmod 感觉有点过分了。

无论如何,我想知道这是否可行,是否可以用更少的代码完成,是否可以在没有 fmod 的情况下完成。

最佳答案

因为 #include <fmod>太主流了,你可以用;

if(foo > max)
{
   int c = foo / max; 
   foo = foo - max*c;
}
else if(foo < min)
{
    int c  = foo / max;
    if( c < 0 ) c = c * -1;
    foo = foo + max*c;
    foo = max + foo;
}

结果:

对于:

int min = 0;
int max = 50;
float foo = 1;
foo -= 5.5;

cpp.sh/4akud

对于:

int min= 0;
int max= 50;
float foo = 45;
foo += 7.5;

cpp.sh/3accv

关于C++:导致数字在成功某个值时溢出并从零开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39015679/

相关文章:

java - 在字符串中每一个或两个字符后插入空格

javascript - parseFloat 不能使用小数点后的零

python - 使用数字列表计算最接近 X 的总和

c++ - 为什么 Rust 需要 C++ 工具链来生成 Rust 二进制文件,而像 Go 这样的语言没有这个要求?

c++ - C++中指向结构的指针数组

c++ - 为什么 const char[] 和 const char* 的比较不同?

c++ - 如何从进程内部确定 CPU 和内存消耗

java - 使用 Java double (或其他任何东西)存储简单分数

algorithm - 找到优先级函数/字母顺序的极值

java - 斐波那契计算