[bug_14303 REOPENED] fixed: NaN and Inf values were not printed with the correct... 09/18009/4
Pierre-Aime Agnel [Wed, 30 Mar 2016 10:12:49 +0000 (12:12 +0200)]
test_run ast bug_14303

Change-Id: Ie5c9ea2446a60261c3a270203e5f25154485db23

scilab/modules/ast/includes/types/tostring_common.hxx
scilab/modules/ast/src/cpp/types/double.cpp
scilab/modules/ast/src/cpp/types/tostring_common.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14303.dia.ref
scilab/modules/ast/tests/nonreg_tests/bug_14303.tst

index d0f6b4c..ead16c6 100644 (file)
@@ -40,7 +40,7 @@
 
 typedef struct __DOUBLE_FORMAT__
 {
-    __DOUBLE_FORMAT__() : iWidth(0), iPrec(0), bExp(false), bPrintPoint(true), bPrintPlusSign(false), bPrintOne(true), bPaddSign(true), iSignLen(SIGN_LENGTH), bPrintBlank(true) {}
+    __DOUBLE_FORMAT__() : iWidth(0), iPrec(0), bExp(false), bPrintPoint(true), bPrintPlusSign(false), bPrintOne(true), bPaddSign(true), iSignLen(SIGN_LENGTH), bPrintBlank(true), bPrintComplexPlusSpace(false) {}
     int iWidth;
     int iPrec;
     bool bExp;
@@ -50,6 +50,7 @@ typedef struct __DOUBLE_FORMAT__
     bool bPaddSign;
     int iSignLen;
     bool bPrintBlank;
+    bool bPrintComplexPlusSpace;
 } DoubleFormat;
 
 /*double*/
@@ -66,6 +67,9 @@ EXTERN_AST void addDoubleComplexValue(std::wostringstream *_postr, double _dblR,
 EXTERN_AST void configureStream(std::wostringstream *_postr, int _iWidth, int _iPrec, char _cFill);
 EXTERN_AST void addSpaces(std::wostringstream *_postr, int _iSpace);
 void addColumnString(std::wostringstream& ostr, int _iFrom, int _iTo);
+EXTERN_AST void printEmptyString(std::wostringstream& ostr);
+EXTERN_AST void printDoubleValue(std::wostringstream& ostr, double val);
+EXTERN_AST void printComplexValue(std::wostringstream& ostr, double val_r, double val_i);
 
 /*int*/
 /*
index 59096bb..ecbc7ce 100644 (file)
@@ -357,25 +357,20 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
         ostr << L"eye *" << std::endl << std::endl;
         if (isComplex() == false)
         {
-            DoubleFormat df;
-            getDoubleFormat((m_pRealData[0]), &df);
-            addDoubleValue(&ostr, (m_pRealData[0]), &df);
+            printDoubleValue(ostr, m_pRealData[0]);
             ostr << std::endl;
         }
         else
         {
             //complex value
-            DoubleFormat dfR, dfI;
-            getDoubleFormat(ZeroIsZero(m_pRealData[0]), &dfR);
-            getDoubleFormat(ZeroIsZero(m_pImgData[0]), &dfI);
-            addDoubleComplexValue(&ostr, ZeroIsZero(m_pRealData[0]), ZeroIsZero(m_pImgData[0]), dfR.iWidth + dfI.iWidth, &dfR, &dfI);
+            printComplexValue(ostr, m_pRealData[0], m_pImgData[0]);
             ostr << std::endl;
         }
         ostr << std::endl;
     }
     else if (isEmpty())
     {
-        ostr << L"    []";
+        printEmptyString(ostr);
         ostr << std::endl;
     }
     else if (isScalar())
@@ -387,27 +382,19 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
 
         if (isComplex() == false)
         {
-            DoubleFormat df;
-            getDoubleFormat((m_pRealData[iPos]), &df);
-            ostr << SPACE_BETWEEN_TWO_VALUES;
-            addDoubleValue(&ostr, (m_pRealData[iPos]), &df);
+            printDoubleValue(ostr, m_pRealData[iPos]);
             ostr << std::endl;
         }
         else
         {
             //complex value
-            DoubleFormat dfR, dfI;
-            getDoubleFormat(ZeroIsZero(m_pRealData[iPos]), &dfR);
-            getDoubleFormat(ZeroIsZero(m_pImgData[iPos]), &dfI);
-            ostr << SPACE_BETWEEN_TWO_VALUES;
-            addDoubleComplexValue(&ostr, ZeroIsZero(m_pRealData[iPos]), ZeroIsZero(m_pImgData[iPos]), dfR.iWidth + dfI.iWidth, &dfR, &dfI);
+            printComplexValue(ostr, m_pRealData[iPos], m_pImgData[iPos]);
             ostr << std::endl;
         }
     }
     else if (getCols() == 1)
     {
         //column vector
-
         if (isComplex() == false)
         {
             for (int i = m_iRows1PrintState ; i < getRows() ; i++)
@@ -415,6 +402,8 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                 iCurrentLine++;
                 if ((iMaxLines == 0 && iCurrentLine >= MAX_LINES) || (iMaxLines != 0 && iCurrentLine >= iMaxLines))
                 {
+                    // Number of lines to print exceeds the max lines allowed
+                    // Record what line we were at
                     m_iRows1PrintState = i;
                     return false;
                 }
@@ -423,10 +412,7 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                 _piDims[0] = i;
                 int iPos = getIndex(_piDims);
 
-                DoubleFormat df;
-                getDoubleFormat(ZeroIsZero(m_pRealData[iPos]), &df);
-                ostr << SPACE_BETWEEN_TWO_VALUES;
-                addDoubleValue(&ostr, ZeroIsZero(m_pRealData[iPos]), &df);
+                printDoubleValue(ostr, m_pRealData[iPos]);
                 ostr << std::endl;
             }
         }
@@ -446,12 +432,7 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                 _piDims[0] = i;
                 int iPos = getIndex(_piDims);
 
-                DoubleFormat dfR, dfI;
-                getDoubleFormat(ZeroIsZero(m_pRealData[iPos]), &dfR);
-                getDoubleFormat(ZeroIsZero(m_pImgData[iPos]), &dfI);
-
-                ostr << SPACE_BETWEEN_TWO_VALUES;
-                addDoubleComplexValue(&ostr, ZeroIsZero(m_pRealData[iPos]), ZeroIsZero(m_pImgData[iPos]), dfR.iWidth + dfI.iWidth, &dfR, &dfI);
+                printComplexValue(ostr, m_pRealData[iPos], m_pImgData[iPos]);
                 ostr << std::endl;
             }
         }
@@ -472,6 +453,7 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                 int iPos = getIndex(_piDims);
 
                 DoubleFormat df;
+                // Get the size of the column to print
                 getDoubleFormat(ZeroIsZero(m_pRealData[iPos]), &df);
                 iLen = static_cast<int>(ostemp.str().size()) + SIZE_BETWEEN_TWO_VALUES + df.iSignLen + df.iWidth;
                 if (iLen >= iLineLen - 1 && iLastVal != i)
@@ -480,6 +462,8 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                     iCurrentLine += 4; //"column x to Y" + empty line + value + empty line
                     if ((iMaxLines == 0 && iCurrentLine >= MAX_LINES) || (iMaxLines != 0 && iCurrentLine >= iMaxLines))
                     {
+                        // Number of lines to print exceeds the max lines allowed
+                        // Record what column we were at
                         m_iCols1PrintState = iLastVal;
                         return false;
                     }
@@ -521,6 +505,8 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                     iCurrentLine += 4; //"column x to Y" + empty line + value + empty line
                     if ((iMaxLines == 0 && iCurrentLine >= MAX_LINES) || (iMaxLines != 0 && iCurrentLine >= iMaxLines))
                     {
+                        // Number of lines to print exceeds the max lines allowed
+                        // Record what column we were at
                         m_iCols1PrintState = iLastVal;
                         return false;
                     }
@@ -555,8 +541,8 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
 
         if (isComplex() == false)
         {
-            //compute the row size for padding for each printed bloc.
-            for (int iCols1 = m_iCols1PrintState ; iCols1 < getCols() ; iCols1++)
+            //compute the row size for padding for the full matrix
+            for (int iCols1 = 0 ; iCols1 < getCols() ; iCols1++)
             {
                 for (int iRows1 = 0 ; iRows1 < getRows() ; iRows1++)
                 {
@@ -568,7 +554,10 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                     getDoubleFormat(ZeroIsZero(m_pRealData[iPos]), &df);
                     piSize[iCols1] = std::max(piSize[iCols1], df.iWidth);
                 }
+            }
 
+            for (int iCols1 = m_iCols1PrintState ; iCols1 < getCols() ; iCols1++)
+            {
                 if (iLen + piSize[iCols1] > iLineLen && iCols1 != iLastCol)
                 {
                     //find the limit, print this part
@@ -668,8 +657,8 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
         }
         else //Complex case
         {
-            //compute the row size for padding for each printed bloc.
-            for (int iCols1 = m_iCols1PrintState ; iCols1 < getCols() ; iCols1++)
+            //compute the row size for padding for the full matrix.
+            for (int iCols1 = 0; iCols1 < getCols() ; iCols1++)
             {
                 for (int iRows1 = 0 ; iRows1 < getRows() ; iRows1++)
                 {
@@ -688,7 +677,10 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                     }
 
                 }
+            }
 
+            for (int iCols1 = m_iCols1PrintState ; iCols1 < getCols() ; iCols1++)
+            {
                 if (iLen + piSize[iCols1] > iLineLen && iCols1 != iLastCol)
                 {
                     //find the limit, print this part
index 10f05d8..c96283b 100644 (file)
@@ -84,7 +84,7 @@ void getDoubleFormat(double _dblVal, DoubleFormat * _pDF)
     int iNbDigit = 0;
     int iNbDec = 0;
     int iBlankSize = _pDF->bPrintBlank ? BLANK_SIZE : 0;
-    _pDF->iSignLen = _pDF->bPrintBlank ? _pDF->iSignLen + 1 : _pDF->iSignLen;
+    _pDF->iSignLen = _pDF->bPrintBlank ? SIGN_LENGTH + BLANK_SIZE : _pDF->iSignLen;
 
     _pDF->bExp |= ConfigVariable::getFormatMode() == 0;
     int iTotalLen = 0;
@@ -92,7 +92,7 @@ void getDoubleFormat(double _dblVal, DoubleFormat * _pDF)
 
     if (ISNAN(_dblVal) || !finite(_dblVal))
     {
-        _pDF->iWidth = 5;      //" nan" or " inf"
+        _pDF->iWidth = 4;      //" nan" or " inf"
         _pDF->iPrec = 0;
         return;
     }
@@ -189,7 +189,7 @@ void getComplexFormat(double _dblR, double _dblI, int *_piTotalWidth, DoubleForm
         }
         else
         {
-            *_piTotalWidth += _pDFR->iWidth + _pDFR->iSignLen;
+            *_piTotalWidth += _pDFR->iWidth;
             _pDFI->iWidth = 0;
             _pDFI->iSignLen = 0;
         }
@@ -198,16 +198,15 @@ void getComplexFormat(double _dblR, double _dblI, int *_piTotalWidth, DoubleForm
     {
         if (isRealZero(_dblR))
         {
-            *_piTotalWidth += _pDFI->iWidth + _pDFI->iSignLen;
+            *_piTotalWidth += _pDFI->iWidth;
             _pDFR->iWidth = 0;
         }
         else
         {
-            *_piTotalWidth += _pDFR->iWidth + _pDFR->iSignLen + _pDFI->iWidth + _pDFI->iSignLen;
+            *_piTotalWidth += _pDFR->iWidth + _pDFI->iWidth;
         }
 
         // i character
-        _pDFI->iWidth += 1;
         *_piTotalWidth += 1;
     }
 }
@@ -248,17 +247,25 @@ void addDoubleValue(std::wostringstream * _postr, double _dblVal, DoubleFormat *
     }
 
     // Step 1: BLANK and SIGN in pwstSign
-    os_swprintf(pwstSign, 32, L"%ls%ls", pBlank, pSign);
+    if (_pDF->bPrintComplexPlusSpace)
+    {
+        os_swprintf(pwstSign, 32, L"%ls%ls%ls", pBlank, pSign, pBlank);
+    }
+    else
+    {
+        os_swprintf(pwstSign, 32, L"%ls%ls", pBlank, pSign);
+    }
+
 
     if (ISNAN(_dblVal))
     {
         //NaN
-        os_swprintf(pwstOutput, 32, L"%ls%*ls", pwstSign, _pDF->iPrec, L"Nan");
+        os_swprintf(pwstOutput, 32, L"%ls%-*ls", pwstSign, _pDF->iWidth - 1, L"Nan");
     }
     else if (!finite(_dblVal))
     {
         //Inf
-        os_swprintf(pwstOutput, 32, L"%ls%*ls", pwstSign, _pDF->iPrec, L"Inf");
+        os_swprintf(pwstOutput, 32, L"%ls%-*ls", pwstSign, _pDF->iWidth - 1, L"Inf");
     }
     else if (_pDF->bExp)
     {
@@ -436,6 +443,7 @@ void addDoubleComplexValue(std::wostringstream * _postr, double _dblR, double _d
             df.iPrec = _pDFI->iPrec;
             df.bExp = _pDFI->bExp;
             df.bPrintPlusSign = true;
+            df.bPrintComplexPlusSpace = true;
             df.bPrintOne = false;
 
             addDoubleValue(&ostemp, _dblI, &df);
@@ -447,7 +455,7 @@ void addDoubleComplexValue(std::wostringstream * _postr, double _dblR, double _d
         }
     }
 
-    configureStream(_postr, _iTotalWidth - 3, 0, ' ');
+    configureStream(_postr, _iTotalWidth, 0, ' ');
     *_postr << std::left << ostemp.str() << std::resetiosflags(std::ios::adjustfield);
 }
 
@@ -479,3 +487,24 @@ void addColumnString(std::wostringstream& ostr, int _iFrom, int _iTo)
     }
 }
 
+void printEmptyString(std::wostringstream& ostr)
+{
+    ostr << L"    []";
+}
+
+void printDoubleValue(std::wostringstream& ostr, double val)
+{
+    DoubleFormat df;
+    getDoubleFormat(val, &df);
+    ostr << SPACE_BETWEEN_TWO_VALUES;
+    addDoubleValue(&ostr, val, &df);
+}
+
+void printComplexValue(std::wostringstream& ostr, double val_r, double val_i)
+{
+    DoubleFormat dfR, dfI;
+    getDoubleFormat(ZeroIsZero(val_r), &dfR);
+    getDoubleFormat(ZeroIsZero(val_i), &dfI);
+    ostr << SPACE_BETWEEN_TWO_VALUES;
+    addDoubleComplexValue(&ostr, ZeroIsZero(val_r), ZeroIsZero(val_i), dfR.iWidth + dfI.iWidth, &dfR, &dfI);
+}
index df54cf7..df2d97b 100644 (file)
@@ -139,3 +139,178 @@ disp(A);
    8.413D+19   9.683D+19
    8.571D+19   9.841D+19
    8.730D+19   1.000D+20
+s = ["-0.034" "- 0.034"  "+1234.5678" "1234 5678"
+"1e43"   "-3.5d-12" "-1.2+i"     "i+1.2"
+""       "%inf"     "Inf"        "-Inf"
+"%i"     "%pi"      "%e"         "%eps"
+];
+format(10);
+disp(strtod(s));
+  -0.034       Nan   1234.5678   1234.
+   1.000D+43  -3.5  -1.2         Nan  
+   Nan         Nan   Nan         Nan  
+   Nan         Nan   Nan         Nan  
+// display with complex numbers
+A =  matrix(linspace(-1E10,1E20,64), 8, 8);
+B =  matrix(linspace(1E20,-1E10,64), 8, 8);
+B(7, 7) = %nan;
+B(2, 1) = %inf;
+A(2, 1) = %nan;
+A(3, 3) = %nan;
+B(4, 4) = 0;
+B(4, 3) = -B(4, 3);
+A(4, 3) = -A(4, 3);
+A(5, 5) = 0;
+B(5, 5) = -B(5, 5);
+A(6, 6) = 0;
+B(6, 6) = 1;
+format(25);
+disp(A + %i * B);
+         column 1
+  -10000000000. + 100000000000000000000.i        
+   Nan + Infi                                    
+   3174603164920635392. + 96825396825079365632.i 
+   4761904752380952576. + 95238095237619040256.i 
+   6349206339841270784. + 93650793650158731264.i 
+   7936507927301587968. + 92063492062698405888.i 
+   9523809514761904128. + 90476190475238096896.i 
+   11111111102222221312. + 88888888887777771520.i
+         column 2
+   12698412689682542592. + 87301587300317462528.i
+   14285714277142859776. + 85714285712857137152.i
+   15873015864603176960. + 84126984125396828160.i
+   17460317452063494144. + 82539682537936502784.i
+   19047619039523811328. + 80952380950476193792.i
+   20634920626984128512. + 79365079363015868416.i
+   22222222214444445696. + 77777777775555559424.i
+   23809523801904762880. + 76190476188095234048.i
+         column 3
+   25396825389365084160. + 74603174600634925056.i
+   26984126976825401344. + 73015873013174599680.i
+   Nan + 71428571425714282496.i                  
+  -30158730151746035712. - 69841269838253965312.i
+   31746031739206352896. + 68253968250793648128.i
+   33333333326666670080. + 66666666663333330944.i
+   34920634914126987264. + 65079365075873013760.i
+   36507936501587304448. + 63492063488412696576.i
+         column 4
+   38095238089047621632. + 61904761900952379392.i
+   39682539676507947008. + 60317460313492054016.i
+   41269841263968256000. + 58730158726031745024.i
+   42857142851428573184.                         
+   44444444438888890368. + 55555555551111110656.i
+   46031746026349215744. + 53968253963650785280.i
+   47619047613809524736. + 52380952376190476288.i
+   49206349201269841920. + 50793650788730159104.i
+         column 5
+   50793650788730167296. + 49206349201269833728.i
+   52380952376190484480. + 47619047613809516544.i
+   53968253963650801664. + 46031746026349199360.i
+   55555555551111110656. + 44444444438888890368.i
+  -42857142851428564992.i                        
+   58730158726031753216. + 41269841263968247808.i
+   60317460313492070400. + 39682539676507930624.i
+   61904761900952379392. + 38095238089047621632.i
+         column 6
+   63492063488412704768. + 36507936501587296256.i
+   65079365075873021952. + 34920634914126979072.i
+   66666666663333339136. + 33333333326666661888.i
+   68253968250793656320. + 31746031739206344704.i
+   69841269838253973504. + 30158730151746027520.i
+   i                                             
+   73015873013174607872. + 26984126976825393152.i
+   74603174600634908672. + 25396825389365084160.i
+         column 7
+   76190476188095234048. + 23809523801904758784.i
+   77777777775555559424. + 22222222214444433408.i
+   79365079363015884800. + 20634920626984108032.i
+   80952380950476177408. + 19047619039523815424.i
+   82539682537936502784. + 17460317452063490048.i
+   84126984125396828160. + 15873015864603164672.i
+   Nan + Nani                                    
+   87301587300317462528. + 12698412689682530304.i
+         column 8
+   88888888887777771520. + 11111111102222221312.i
+   90476190475238096896. + 9523809514761895936.i 
+   92063492062698422272. + 7936507927301570560.i 
+   93650793650158731264. + 6349206339841261568.i 
+   95238095237619040256. + 4761904752380952576.i 
+   96825396825079365632. + 3174603164920627200.i 
+   98412698412539674624. + 1587301577460318208.i 
+   100000000000000000000. - 10000000000.i        
+format(10);
+disp(A + %i * B);
+         column 1 to 2
+  -1.000D+10 + 1.000D+20i   1.270D+19 + 8.730D+19i
+   Nan + Infi               1.429D+19 + 8.571D+19i
+   3.175D+18 + 9.683D+19i   1.587D+19 + 8.413D+19i
+   4.762D+18 + 9.524D+19i   1.746D+19 + 8.254D+19i
+   6.349D+18 + 9.365D+19i   1.905D+19 + 8.095D+19i
+   7.937D+18 + 9.206D+19i   2.063D+19 + 7.937D+19i
+   9.524D+18 + 9.048D+19i   2.222D+19 + 7.778D+19i
+   1.111D+19 + 8.889D+19i   2.381D+19 + 7.619D+19i
+         column 3 to 4
+   2.540D+19 + 7.460D+19i   3.810D+19 + 6.190D+19i
+   2.698D+19 + 7.302D+19i   3.968D+19 + 6.032D+19i
+   Nan + 7.143D+19i         4.127D+19 + 5.873D+19i
+  -3.016D+19 - 6.984D+19i   4.286D+19             
+   3.175D+19 + 6.825D+19i   4.444D+19 + 5.556D+19i
+   3.333D+19 + 6.667D+19i   4.603D+19 + 5.397D+19i
+   3.492D+19 + 6.508D+19i   4.762D+19 + 5.238D+19i
+   3.651D+19 + 6.349D+19i   4.921D+19 + 5.079D+19i
+         column 5 to 6
+   5.079D+19 + 4.921D+19i   6.349D+19 + 3.651D+19i
+   5.238D+19 + 4.762D+19i   6.508D+19 + 3.492D+19i
+   5.397D+19 + 4.603D+19i   6.667D+19 + 3.333D+19i
+   5.556D+19 + 4.444D+19i   6.825D+19 + 3.175D+19i
+  -4.286D+19i               6.984D+19 + 3.016D+19i
+   5.873D+19 + 4.127D+19i   i                     
+   6.032D+19 + 3.968D+19i   7.302D+19 + 2.698D+19i
+   6.190D+19 + 3.810D+19i   7.460D+19 + 2.540D+19i
+         column 7 to 8
+   7.619D+19 + 2.381D+19i   8.889D+19 + 1.111D+19i
+   7.778D+19 + 2.222D+19i   9.048D+19 + 9.524D+18i
+   7.937D+19 + 2.063D+19i   9.206D+19 + 7.937D+18i
+   8.095D+19 + 1.905D+19i   9.365D+19 + 6.349D+18i
+   8.254D+19 + 1.746D+19i   9.524D+19 + 4.762D+18i
+   8.413D+19 + 1.587D+19i   9.683D+19 + 3.175D+18i
+   Nan + Nani               9.841D+19 + 1.587D+18i
+   8.730D+19 + 1.270D+19i   1.000D+20 - 1.000D+10i
+format("e");
+disp(A + %i * B);
+         column 1 to 2
+  -1.000D+10 + 1.000D+20i   1.270D+19 + 8.730D+19i
+   Nan + Infi               1.429D+19 + 8.571D+19i
+   3.175D+18 + 9.683D+19i   1.587D+19 + 8.413D+19i
+   4.762D+18 + 9.524D+19i   1.746D+19 + 8.254D+19i
+   6.349D+18 + 9.365D+19i   1.905D+19 + 8.095D+19i
+   7.937D+18 + 9.206D+19i   2.063D+19 + 7.937D+19i
+   9.524D+18 + 9.048D+19i   2.222D+19 + 7.778D+19i
+   1.111D+19 + 8.889D+19i   2.381D+19 + 7.619D+19i
+         column 3 to 4
+   2.540D+19 + 7.460D+19i   3.810D+19 + 6.190D+19i
+   2.698D+19 + 7.302D+19i   3.968D+19 + 6.032D+19i
+   Nan + 7.143D+19i         4.127D+19 + 5.873D+19i
+  -3.016D+19 - 6.984D+19i   4.286D+19             
+   3.175D+19 + 6.825D+19i   4.444D+19 + 5.556D+19i
+   3.333D+19 + 6.667D+19i   4.603D+19 + 5.397D+19i
+   3.492D+19 + 6.508D+19i   4.762D+19 + 5.238D+19i
+   3.651D+19 + 6.349D+19i   4.921D+19 + 5.079D+19i
+         column 5 to 6
+   5.079D+19 + 4.921D+19i   6.349D+19 + 3.651D+19i
+   5.238D+19 + 4.762D+19i   6.508D+19 + 3.492D+19i
+   5.397D+19 + 4.603D+19i   6.667D+19 + 3.333D+19i
+   5.556D+19 + 4.444D+19i   6.825D+19 + 3.175D+19i
+  -4.286D+19i               6.984D+19 + 3.016D+19i
+   5.873D+19 + 4.127D+19i   1.000D+00i            
+   6.032D+19 + 3.968D+19i   7.302D+19 + 2.698D+19i
+   6.190D+19 + 3.810D+19i   7.460D+19 + 2.540D+19i
+         column 7 to 8
+   7.619D+19 + 2.381D+19i   8.889D+19 + 1.111D+19i
+   7.778D+19 + 2.222D+19i   9.048D+19 + 9.524D+18i
+   7.937D+19 + 2.063D+19i   9.206D+19 + 7.937D+18i
+   8.095D+19 + 1.905D+19i   9.365D+19 + 6.349D+18i
+   8.254D+19 + 1.746D+19i   9.524D+19 + 4.762D+18i
+   8.413D+19 + 1.587D+19i   9.683D+19 + 3.175D+18i
+   Nan + Nani               9.841D+19 + 1.587D+18i
+   8.730D+19 + 1.270D+19i   1.000D+20 - 1.000D+10i
index 1bf72b8..c330e5f 100644 (file)
@@ -37,3 +37,32 @@ disp(A);
 format(10);
 disp(A);
 
+s = ["-0.034" "- 0.034"  "+1234.5678" "1234 5678"
+"1e43"   "-3.5d-12" "-1.2+i"     "i+1.2"
+""       "%inf"     "Inf"        "-Inf"
+"%i"     "%pi"      "%e"         "%eps"
+];
+format(10);
+disp(strtod(s));
+
+// display with complex numbers
+A =  matrix(linspace(-1E10,1E20,64), 8, 8);
+B =  matrix(linspace(1E20,-1E10,64), 8, 8);
+B(7, 7) = %nan;
+B(2, 1) = %inf;
+A(2, 1) = %nan;
+A(3, 3) = %nan;
+B(4, 4) = 0;
+B(4, 3) = -B(4, 3);
+A(4, 3) = -A(4, 3);
+A(5, 5) = 0;
+B(5, 5) = -B(5, 5);
+A(6, 6) = 0;
+B(6, 6) = 1;
+format(25);
+disp(A + %i * B);
+format(10);
+disp(A + %i * B);
+format("e");
+disp(A + %i * B);
+