C++ 什么';我执行普朗克定律有什么问题?

C++ 什么';我执行普朗克定律有什么问题?,c++,physics,C++,Physics,也许我太累了,但我不明白为什么这个计算普朗克定律的简单代码不起作用 #包括 #包括 常数双h=6.626070040e-34; 常数双c=299792458; 常数双kB=1.38064852e-23; 双普朗克定律波长(双t,双l) { 返回((2*h*c*c)/(l*l*l*l*l)) /(exp(h*c/(l*t*kB))-1); } int main() { std::cout您的结果是正确的,下图中的y轴为nm,kW。如果您将它们转换为SI单位,则有一个因数为1e12。根据图表,大致

也许我太累了,但我不明白为什么这个计算普朗克定律的简单代码不起作用

#包括
#包括
常数双h=6.626070040e-34;
常数双c=299792458;
常数双kB=1.38064852e-23;
双普朗克定律波长(双t,双l)
{
返回((2*h*c*c)/(l*l*l*l*l))
/(exp(h*c/(l*t*kB))-1);
}
int main()
{

std::cout您的结果是正确的,下图中的y轴为
nm
kW
。如果您将它们转换为SI单位,则有一个因数为
1e12
。根据图表,大致
3e12
,与您的计算结果非常接近。

图表只是使用了不同的刻度。Bλ单位是W·sr−1·m−3.

我确实有一些物理方面的知识,但你确实错过了
main
函数中的
return
。很抱歉挑剔:)这是个好问题。尝试使用
long double
而不是
double
@AndrejsCainikovs
main()
是一个可以省略返回的非无效函数。它有一个隐式的
返回0
@IlyaBursov,它不会改变。可能是数字错误。我已经注意到了刻度。我的参数是
0.5e-6
即0.5nm。普朗克公式不是已经用国际单位制了吗?比如y轴上的瓦特?所以我希望我的输出不是o大约3000与图表一致。否。y轴有nm^(-1),这不是国际单位制,存在
1e9
的差异。您只注意到x轴,没有注意到y轴。
#include <iostream>
#include <cmath>

const double h = 6.626070040e-34;

const double c = 299792458;

const double kB = 1.38064852e-23;

double planck_law_wavelength (double t, double l)
{
    return ((2 * h * c * c) / (l * l * l * l * l))
        / (exp (h * c / (l * t * kB)) - 1);
}

int main ()
{
    std::cout << planck_law_wavelength (4000, 0.5e-6) << std::endl;
}