以下の私の C コードで奇妙なことが起こっています。
数値を比較したいので、小数点以下 4 桁に丸めます。
デバッグしたところ、渡されたデータを確認できました。
の値tmp_ptr->current_longitude
は 6722.31500000 で、 の値tmp_ptr->current_latitude
は 930.0876500000 です。
sprintf ステートメントを使用した後:
charTmpPtrXPos = "6722.3150" and charTmpPtrYPos = "930.0876".
speed_info->myXPos と speed_info->myYPos に対してまったく同じ結果が期待されますが、奇妙なことに、 sprintf ステートメントspeed_info->myXPos = 6722.31500000
の値speed_info->myYPos > = 30.0876500000
charSpeedPtrYPos= "930.0877"
したがって、基本的に sprintf ステートメントは 2 番目の値に対して異なる動作をし、それを切り上げているように見えます。これをデバッグしたところ、sprintf ステートメントへの入力がまったく同じであることがわかりました。
誰かがこれの理由を考えることができますか?
sizeOfSpeedList = op_prg_list_size (global_speed_trajectory);
tmp_ptr= (WsqT_Location_Message*)op_prg_mem_alloc(sizeof(WsqT_Location_Message));
tmp_ptr = mbls_convert_lat_long_to_xy (own_node_objid);
sprintf(charTmpPtrXPos, "%0.4lf", tmp_ptr->current_longitude);
sprintf(charTmpPtrYPos, "%0.4lf", tmp_ptr->current_latitude);
speed_info = (SpeedInformation *) op_prg_mem_alloc (sizeof (SpeedInformation));
for (count=0; count<sizeOfSpeedList; count++)
{
speed_info = (SpeedInformation*) op_prg_list_access (global_speed_trajectory, count);
sprintf(charSpeedPtrXPos, "%0.4lf", speed_info->myXPos);
sprintf(charSpeedPtrYPos, "%0.4lf", speed_info->myYPos);
//if((tmp_ptr->current_longitude == speed_info->myXPos) && (tmp_ptr->current_latitude == speed_info->myYPos))
if ((strcmp(charTmpPtrXPos, charSpeedPtrXPos) == 0) && (strcmp(charTmpPtrYPos, charSpeedPtrYPos) == 0))
{
my_speed = speed_info->speed;
break;
}
}