возврат неверных значений C++

пишу функцию, хочу чтобы она вернула мне значение физической величины. в ответ получаю 2500, хотя везде прописано чтобы она возвращала мне значение double, да и ладно бы это - я вызываю выражение внутри функции и оно пишется правильно! думал, что проблема в cout, переписал с printf - не помогло. теряюсь. просветите пожалуйста, почему функция работает не так как я хочу?

#include <iostream>
#include <cmath>
//using namespace std;
double bk(double I){
    return (double)(4*M_PI*pow(10,-7)*I*18*pow(10,-3)/9,25/pow(10,-2));
}


int main(){
    std::cout<<bk(31.0)<<std::endl;
    std::cout<<bk(40.0)<<std::endl;
    std::cout<<bk(59.5)<<std::endl;
    std::cout<<bk(71.0)<<std::endl;
    std::cout<<bk(82.0)<<std::endl;
    std::cout<<bk(123.0)<<std::endl;
    std::cout<<bk(190.0)<<std::endl;
    return 0;
}

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Берём правильно настроенный компилятор и видим ошибку в коде:

$ g++ -std=c++23 -pedantic -Wall -Wextra -Werror -Wwrite-strings -Wconversion temp.cpp 
temp.cpp: In function ‘double bk(double)’:
temp.cpp:7:54: error: value computed is not used [-Werror=unused-value]
    7 |     return (double)(4*M_PI*pow(10,-7)*I*18*pow(10,-3)/9,25/pow(10,-2));
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
cc1plus: all warnings being treated as errors

В C++ есть оператор ,. Когда вы по ошибке пишете вещественное значение 9.25 как 9,25, то вы можете одну формулу превратить в две, соединённые запятой.

Семантика , такая: вычисляются выражения до запятой и после. Значение до запятой выбрасывается, значение после запятой возвращается. То есть значение выражения (A, B) совпадает с B. От A ничего не остаётся, только побочные эффекты. Старая фича, держитесь от неё по дальше.

Если исправить запятую на точку то получим:

$ g++ -std=c++23 -pedantic -Wall -Wextra -Werror -Wwrite-strings -Wconversion temp.cpp 

$ ./a.out
7.58058e-06
9.78139e-06
1.45498e-05
1.7362e-05
2.00519e-05
3.00778e-05
4.64616e-05
→ Ссылка