возврат неверных значений 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 шт):
Берём правильно настроенный компилятор и видим ошибку в коде:
$ 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