gpt4 book ai didi

C++ 数学没有产生正确的输出

转载 作者:行者123 更新时间:2023-11-27 22:35:15 24 4
gpt4 key购买 nike

为什么该算法在 C++ 中不应该生成三角形输出?

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
double w = 1050;
double a = 1050*3;
double speed;
for(int x = 0; x <= 1050; x+=42)
{
speed = 42*((4*a)/w*abs((fmod((x-w/2),w))-w/2)*-1+w)/w;
cout << "x: " << x << " speed: " << speed << endl;
}
}

产生:

x: 0 speed: -462
x: 42 speed: -441.84
x: 84 speed: -421.68
x: 126 speed: -401.52
x: 168 speed: -381.36
x: 210 speed: -361.2
x: 252 speed: -341.04
x: 294 speed: -320.88
x: 336 speed: -300.72
x: 378 speed: -280.56
x: 420 speed: -260.4
x: 462 speed: -240.24
x: 504 speed: -220.08
x: 546 speed: -199.92
x: 588 speed: -179.76
x: 630 speed: -159.6
x: 672 speed: -139.44
x: 714 speed: -119.28
x: 756 speed: -99.12
x: 798 speed: -78.96
x: 840 speed: -58.8
x: 882 speed: -38.64
x: 924 speed: -18.48
x: 966 speed: 1.68
x: 1008 speed: 21.84
x: 1050 speed: 42

https://rextester.com/NSI24628

正确答案是 enter image description here https://docs.google.com/spreadsheets/d/1XiUgHs7QYOWqggjLup0Wsx-eo0R82xrelUTTDBlgNkE/edit?usp=sharing

为什么 C++ 生成的是线性答案,而期望的是三角函数?

最佳答案

您的公式期望 fmod((x-w/2),w) 的结果在 [0,w) 范围内,但事实并非如此。实际范围是(-w,w)。如果 (x-w/2) 为负数,则 fmod 的结果将为负数。

简单的解决方法是将 fmod((x-w/2),w) 替换为 fmod((x+w/2),w) 以确保第一个fmod参数为正,整体效果不变。

关于C++ 数学没有产生正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55347476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com