Code of Conduct
By submitting this report you automatically agree that you've read and accepted the following conditions.
- Support for DQ Robotics is given voluntarily and it's not the developers' role to educate and/or convince anyone of their vision.
- Any possible response and its timeliness will be based on the relevance, accuracy, and politeness of a request and the following discussion.
- If a DQ Robotics member replies, the user must let them know if their response solves their issue or not.
- Any suggestion/advice/request made by anyone, as well intentioned as they might be, might not be incorporated into DQ Robotics.
Bug description
The C++ code currently doesn't handle operations between Inf/NaN and dual quaternions. This leads to incorrect results in edge cases. This is similar to the issue described in dqrobotics/matlab#117.
To Reproduce
This has been replicated by @juanjqo here: dqrobotics/matlab#117 (comment)
Code
#include <iostream>
#include <dqrobotics/DQ.h>
using namespace DQ_robotics;
/**
* @brief show_data shows the value of a given DQ and its coefficients
* @param x The DQ to be shown.
*/
void show_data(const DQ& x);
int main()
{
std::vector<DQ> list_of_problematic_operations = {
inv(DQ(0)),
inv(E_),
E_*NAN,
DQ{1}*NAN,
E_*INFINITY,
DQ{1}*INFINITY,
};
for (auto& x : list_of_problematic_operations)
show_data(x);
return 0;
}
void show_data(const DQ& x)
{
std::cout<<"-----"<<std::endl;
std::cout<<"x: "<<x<<std::endl;
std::cout<<"x.q: "<<x.q.transpose()<<std::endl;
std::cout<<"-----"<<std::endl;
}
CMakeLists.txt
Clone and build:
cmake_minimum_required(VERSION 3.22...3.26)
project(mbug117 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(UNIX AND NOT APPLE)
FIND_PACKAGE(Eigen3 REQUIRED)
INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR})
ADD_COMPILE_OPTIONS(-Werror=return-type -Wall -Wextra -Wmissing-declarations -Wredundant-decls -Woverloaded-virtual)
endif()
if(APPLE)
INCLUDE_DIRECTORIES(
/usr/local/include/
/usr/local/include/eigen3
# Most recent versions of brew install here
/opt/homebrew/include
/opt/homebrew/include/eigen3)
ADD_COMPILE_OPTIONS(-Werror=return-type -Wall -Wextra -Wmissing-declarations -Wredundant-decls -Woverloaded-virtual)
# The library is installed here when using the regular cmake ., make, sudo make install
LINK_DIRECTORIES(
/usr/local/lib/)
endif()
add_executable(mbug117 main.cpp)
target_link_libraries(mbug117
dqrobotics
)
Output
-----
x: 0
x.q: -nan -nan -nan -nan -nan -nan -nan -nan
-----
-----
x: 0
x.q: -nan -nan -nan -nan -nan -nan -nan -nan
-----
-----
x: 0
x.q: nan nan nan nan nan nan nan nan
-----
-----
x: 0
x.q: nan nan nan nan nan nan nan nan
-----
-----
x: E*(inf)
x.q: -nan -nan -nan -nan inf -nan -nan -nan
-----
-----
x: inf
x.q: inf -nan -nan -nan -nan -nan -nan -nan
-----
Expected behavior
It must behave exactly like in MATLAB.
Expected output
Analogous to MATLAB's.
Environment:
- OS: Ubuntu 24.04.01 LTS
- dqrobotics version: libdqrobotics:amd64/noble 20.04.0-0-202505300421-ubuntu24.04.1
- CPP compiler: gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
Additional context
- This bug will be fixed after the MATLAB one is fixed.
Code of Conduct
By submitting this report you automatically agree that you've read and accepted the following conditions.
Bug description
The C++ code currently doesn't handle operations between Inf/NaN and dual quaternions. This leads to incorrect results in edge cases. This is similar to the issue described in dqrobotics/matlab#117.
To Reproduce
This has been replicated by @juanjqo here: dqrobotics/matlab#117 (comment)
Code
CMakeLists.txt
Clone and build:
Output
Expected behavior
It must behave exactly like in MATLAB.
Expected output
Analogous to MATLAB's.
Environment:
Additional context