{"id":13024,"date":"2022-11-30T17:22:53","date_gmt":"2022-11-30T15:22:53","guid":{"rendered":"https:\/\/www.btc-embedded.com\/?p=13024"},"modified":"2022-12-15T13:48:21","modified_gmt":"2022-12-15T11:48:21","slug":"why-back-to-back-testing-is-still-needed-for-floating-point","status":"publish","type":"post","link":"https:\/\/www.btc-embedded.com\/de\/why-back-to-back-testing-is-still-needed-for-floating-point\/","title":{"rendered":"Why Back-to-back testing is still needed for floating-point"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"13024\" class=\"elementor elementor-13024\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3b5f0493 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3b5f0493\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-559a247a\" data-id=\"559a247a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-83aaa38 elementor-widget elementor-widget-heading\" data-id=\"83aaa38\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Introduction<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d83c847 elementor-widget elementor-widget-text-editor\" data-id=\"d83c847\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">When I started working at BTC Embedded Systems in 2014, floating-point was a rare topic in customer meetings and many control units supported fixed-point only. But since then, floating-point became more and more important and has fully arrived in the projects today.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">Back-to-back testing can be used for various use cases but the most common one is to compare a Simulink model vs. auto-generated production code. In the past, this made a lot of sense since the model was usually using floating-point and the code was implemented with fixed-point. The Back-to-back test verified, if the translation from model to code does still lead to the same behavior.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">This raises the question, if a floating-point Back-to-back test is still needed, since both model and code use floating-point data types now.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7c099a8 elementor-widget elementor-widget-heading\" data-id=\"7c099a8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">How does floating-point work? <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a1ff07f elementor-widget elementor-widget-text-editor\" data-id=\"a1ff07f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">Fixed-point is not a real datatype, it could be described as a ways to implement integer datatypes with a user-defined precision. Please, also read the article What you should know about fixed-point from my colleague Markus Gros for more information.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">However, this is different for floating-point variables. The available bits are split into 3 different sections to represent the sign, the exponent, and the mantissa (see below).<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-acf3998 elementor-widget elementor-widget-image\" data-id=\"acf3998\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"284\" src=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2022\/11\/Floating-Point-Structure.png\" class=\"attachment-large size-large wp-image-13166\" alt=\"Why a floating-point back-to-back test is still needed - floating-point structure\" srcset=\"https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2022\/11\/Floating-Point-Structure.png 981w, https:\/\/www.btc-embedded.com\/wp-content\/uploads\/2022\/11\/Floating-Point-Structure-768x272.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ff17c0 elementor-widget elementor-widget-text-editor\" data-id=\"4ff17c0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">For the value 1 with a 32-bit floating-point variable (single precision), it looks like this:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><ul><li><span data-contrast=\"auto\">Value: 1<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><li><span data-contrast=\"auto\">Actually stored in floating-point: 1<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><li><span data-contrast=\"auto\">Binary: 0 01111111 00000000000000000000000<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><li><span data-contrast=\"auto\">IEEE 754 (Value): + | 2^0 | 1.0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><li><span data-contrast=\"auto\">IEEE 754 (Encoded): 0 | 127 | 0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><li><span data-contrast=\"auto\">Po2: 1 * 2^0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5c18be elementor-widget elementor-widget-text-editor\" data-id=\"d5c18be\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">For the value 0.1 we get the following result:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Value: 0.1<\/span><\/li><\/ul><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Actually stored in floating-point: 0.100000001490116119384765625<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Binary: 0 01111011 10011001100110011001101<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">IEEE 754 (Value): + | 2^-4 | 1.600000023841858<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">IEEE 754 (Encoded): 0 | 123 | 5033165<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"6\" data-aria-level=\"1\"><span data-contrast=\"auto\">Po2: 3602879701896397 * 2^-55<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f3da238 elementor-widget elementor-widget-text-editor\" data-id=\"f3da238\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">Based on the concept of mantissa and exponent, the above example shows that it can be a problem to represent several exact values like 0.1. If you want to know more about floating-point variables, please check out my article <a href=\"https:\/\/www.btc-embedded.com\/what-you-should-know-about-floating-point\/\">What you should know about floating-point<\/a>.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">If you want to check out more values, please, have a look at the following website: <\/span><a href=\"https:\/\/www.h-schmidt.net\/FloatConverter\/IEEE754.html\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"none\">https:\/\/www.h-schmidt.net\/FloatConverter\/IEEE754.html<\/span><\/a><span data-contrast=\"auto\"> and try 0.2 or 16,777,217<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cb1475 elementor-widget elementor-widget-heading\" data-id=\"2cb1475\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">What influences a floating-point value? <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-732d3d4 elementor-widget elementor-widget-text-editor\" data-id=\"732d3d4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">In addition to the fact that specific values might not be representable with floating-point data types, there are additional influences on how a value is handled in a calculation like<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Rounding methods<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Optimization<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul><ul><li data-leveltext=\"%1.\" data-font=\"Calibri\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Precision (depending on the CPU)<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335559685&quot;:1200}\">\u00a0<\/span><\/li><\/ul><div>\u00a0<\/div><p><span data-contrast=\"auto\">Each compiler with floating-point support provides settings to define how the code should be handled. The available options might be different for each compiler as well.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">In addition, floating-point variables cannot be considered for all operations. If you want to make a comparison like x == 0.1 you will never catch the true case. At least for these situations you will still need to go with fixed-point variables.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ffe7789 elementor-widget elementor-widget-heading\" data-id=\"ffe7789\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">How to ensure that no deviant behavior occurs between model and code? <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24084d2 elementor-widget elementor-widget-text-editor\" data-id=\"24084d2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"TextRun SCXW21642111 BCX9\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">This brings us back to the initial question if a <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">f<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">loating-<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">p<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">oint <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">B<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">ack-to-<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">b<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">ack <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">t<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">est is still needed? As we have seen in the previous text, floating-point <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">arithmetics<\/span> <span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">have a lot of influence factors that might lead to a <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">different <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">results<\/span> <span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">on <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">m<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">odel and <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">c<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">ode<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\"> level<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\"> (and even differences when the same code is compiled with different compilers)<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">. To ensure equal structural behavior between model and code, a Back-to-<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">b<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">ack <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">t<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">est is the best option. Since the compiler for floating-point has &#8211; in contrast to fixed-point data types &#8211; a huge influence on the result, I even suggest <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">to run<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\"> a Back-to-<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">b<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">ack <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">T<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">est between Model and Processor (MIL vs. PIL) to ensure that the target compiler also handles the code equal to the model<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\"> and host compiler<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">. The good thing about Back-to-<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">b<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">ack <\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">t<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">esting is that it can be fully <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\">automized, and<\/span><span class=\"NormalTextRun SCXW21642111 BCX9\" data-ccp-parastyle=\"Normal (Web)\"> does only require user interaction if a deviation is detected.<\/span><\/span><span class=\"EOP SCXW21642111 BCX9\" data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27e953f elementor-widget elementor-widget-heading\" data-id=\"27e953f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6cdaf06 elementor-widget elementor-widget-text-editor\" data-id=\"6cdaf06\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Floating-point definitely brings several advantages for some use cases and you get rid of the annoying issue of finding the right scaling for fixed-point data types. However, you have to keep in mind that the compiler settings play a big role in floating-point and can be found with a floating-point Back-to-back test.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Introduction When I started working at BTC Embedded Systems in 2014, floating-point was a rare topic in customer meetings and many control units supported fixed-point only. But since then, floating-point became more and more important and has fully arrived in the projects today.\u00a0 Back-to-back testing can be used for various use cases but the most [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":13182,"comment_status":"open","ping_status":"closed","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[55,56,54],"product":[],"use_cases":[],"class_list":["post-13024","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-ci-cd","tag-cloud","tag-jenkins"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/posts\/13024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/comments?post=13024"}],"version-history":[{"count":0,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/posts\/13024\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/media\/13182"}],"wp:attachment":[{"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/media?parent=13024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/categories?post=13024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/tags?post=13024"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/product?post=13024"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.btc-embedded.com\/de\/wp-json\/wp\/v2\/use_cases?post=13024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}