You've already forked lazarus-ccr
fpspreadsheet: Fix floating point formula tests cases to give matching results even without tolerance value. Fix BIFFExplorer to show all digits of floating point cell values.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3343 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -1741,7 +1741,7 @@ begin
|
|||||||
'Token tNUM (Number)');
|
'Token tNUM (Number)');
|
||||||
numBytes := 8;
|
numBytes := 8;
|
||||||
Move(FBuffer[FBufferIndex], dbl, numBytes);
|
Move(FBuffer[FBufferIndex], dbl, numBytes);
|
||||||
ShowInRow(FCurrRow, FBufferIndex, numBytes, FloatToStr(dbl),
|
ShowInRow(FCurrRow, FBufferIndex, numBytes, Format('%g', [dbl]), //FloatToStr(dbl),
|
||||||
'IEEE 754 floating-point value');
|
'IEEE 754 floating-point value');
|
||||||
end;
|
end;
|
||||||
$20, $40, $60:
|
$20, $40, $60:
|
||||||
@ -2565,7 +2565,7 @@ begin
|
|||||||
// Offset 6: Double value
|
// Offset 6: Double value
|
||||||
numBytes := 8;
|
numBytes := 8;
|
||||||
Move(FBuffer[FBufferIndex], dbl, numBytes);
|
Move(FBuffer[FBufferIndex], dbl, numBytes);
|
||||||
ShowInRow(FCurrRow, FBufferIndex, numBytes, FloatToStr(dbl),
|
ShowInRow(FCurrRow, FBufferIndex, numBytes, Format('%g', [dbl]), //FloatToStr(dbl),
|
||||||
'IEEE 764 floating-point value');
|
'IEEE 764 floating-point value');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -142,6 +142,7 @@ end;
|
|||||||
procedure TSpreadWriteReadFormulaTests.TestCalcRPNFormulas(AFormat: TsSpreadsheetFormat);
|
procedure TSpreadWriteReadFormulaTests.TestCalcRPNFormulas(AFormat: TsSpreadsheetFormat);
|
||||||
const
|
const
|
||||||
SHEET = 'Sheet1';
|
SHEET = 'Sheet1';
|
||||||
|
STATS_NUMBERS: Array[0..4] of Double = (1.0, 1.1, 1.2, 0.9, 0.8);
|
||||||
var
|
var
|
||||||
MyWorksheet: TsWorksheet;
|
MyWorksheet: TsWorksheet;
|
||||||
MyWorkbook: TsWorkbook;
|
MyWorkbook: TsWorkbook;
|
||||||
@ -156,8 +157,15 @@ var
|
|||||||
t: TTime;
|
t: TTime;
|
||||||
hr,min,sec,msec: Word;
|
hr,min,sec,msec: Word;
|
||||||
ErrorMargin: double;
|
ErrorMargin: double;
|
||||||
|
k: Integer;
|
||||||
|
{ When comparing soll and formula values we must make sure that the soll
|
||||||
|
values are calculated from double precision numbers, they are used in
|
||||||
|
the formula calculation as well. The next variables, along with STATS_NUMBERS
|
||||||
|
above, hold the arguments for the direction function calls. }
|
||||||
|
number: Double;
|
||||||
|
numberArray: array[0..4] of Double;
|
||||||
begin
|
begin
|
||||||
ErrorMargin:=1.44E-7;
|
ErrorMargin:=0; //1.44E-7;
|
||||||
//1.44E-7 for SUMSQ formula
|
//1.44E-7 for SUMSQ formula
|
||||||
//6.0E-8 for SUM formula
|
//6.0E-8 for SUM formula
|
||||||
//4.8E-8 for MAX formula
|
//4.8E-8 for MAX formula
|
||||||
@ -208,6 +216,19 @@ begin
|
|||||||
CheckEquals(ord(expected.ArgumentType), ord(actual.ArgumentType),
|
CheckEquals(ord(expected.ArgumentType), ord(actual.ArgumentType),
|
||||||
'Test read calculated formula data type mismatch, formula "' + formula +
|
'Test read calculated formula data type mismatch, formula "' + formula +
|
||||||
'", cell '+CellNotation(MyWorkSheet,Row,1));
|
'", cell '+CellNotation(MyWorkSheet,Row,1));
|
||||||
|
|
||||||
|
// The now function result is volatile, i.e. changes continuously. The
|
||||||
|
// time for the soll value was created such that we can expect to have
|
||||||
|
// the file value in the same second. Therefore we neglect the milliseconds.
|
||||||
|
if formula = '=NOW()' then begin
|
||||||
|
// Round soll value to seconds
|
||||||
|
DecodeTime(expected.NumberValue, hr,min,sec,msec);
|
||||||
|
expected.NumberValue := EncodeTime(hr, min, sec, 0);
|
||||||
|
// Round formula value to seconds
|
||||||
|
DecodeTime(actual.NumberValue, hr,min,sec,msec);
|
||||||
|
actual.NumberValue := EncodeTime(hr,min,sec,0);
|
||||||
|
end;
|
||||||
|
|
||||||
case actual.ArgumentType of
|
case actual.ArgumentType of
|
||||||
atBool:
|
atBool:
|
||||||
CheckEquals(BoolToStr(expected.BoolValue), BoolToStr(actual.BoolValue),
|
CheckEquals(BoolToStr(expected.BoolValue), BoolToStr(actual.BoolValue),
|
||||||
|
@ -99,7 +99,6 @@
|
|||||||
<Unit5>
|
<Unit5>
|
||||||
<Filename Value="testsutility.pas"/>
|
<Filename Value="testsutility.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="testsutility"/>
|
|
||||||
</Unit5>
|
</Unit5>
|
||||||
<Unit6>
|
<Unit6>
|
||||||
<Filename Value="internaltests.pas"/>
|
<Filename Value="internaltests.pas"/>
|
||||||
@ -109,7 +108,6 @@
|
|||||||
<Unit7>
|
<Unit7>
|
||||||
<Filename Value="formattests.pas"/>
|
<Filename Value="formattests.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="formattests"/>
|
|
||||||
</Unit7>
|
</Unit7>
|
||||||
<Unit8>
|
<Unit8>
|
||||||
<Filename Value="colortests.pas"/>
|
<Filename Value="colortests.pas"/>
|
||||||
@ -118,7 +116,6 @@
|
|||||||
<Unit9>
|
<Unit9>
|
||||||
<Filename Value="fonttests.pas"/>
|
<Filename Value="fonttests.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="fonttests"/>
|
|
||||||
</Unit9>
|
</Unit9>
|
||||||
<Unit10>
|
<Unit10>
|
||||||
<Filename Value="optiontests.pas"/>
|
<Filename Value="optiontests.pas"/>
|
||||||
@ -131,6 +128,7 @@
|
|||||||
<Unit12>
|
<Unit12>
|
||||||
<Filename Value="rpnformulaunit.pas"/>
|
<Filename Value="rpnformulaunit.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="rpnFormulaUnit"/>
|
||||||
</Unit12>
|
</Unit12>
|
||||||
<Unit13>
|
<Unit13>
|
||||||
<Filename Value="formulatests.pas"/>
|
<Filename Value="formulatests.pas"/>
|
||||||
|
@ -569,12 +569,15 @@
|
|||||||
|
|
||||||
// ARCCOS - valid result
|
// ARCCOS - valid result
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=acos(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=acos(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekACOS, nil))));
|
RPNFunc(fekACOS, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(arccos(0.1));
|
sollValues[Row] := CreateNumberArg(arccos(number));
|
||||||
|
// Don't explicitly use the constant here because this will be "extended"
|
||||||
|
// which is slightly different from the double value used in the formula
|
||||||
|
|
||||||
// ACOS - error result (arccos is not defined outside the interval [-1..1]
|
// ACOS - error result (arccos is not defined outside the interval [-1..1]
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -587,12 +590,13 @@
|
|||||||
|
|
||||||
// ARCCOSH - valid result
|
// ARCCOSH - valid result
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 1.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=acosh(1.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=acosh(1.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(1.1,
|
RPNNumber(number,
|
||||||
RPNFunc(fekACOSH, nil))));
|
RPNFunc(fekACOSH, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(arccosh(1.1));
|
sollValues[Row] := CreateNumberArg(arccosh(number));
|
||||||
|
|
||||||
// ACOSH - error result (arccos is not defined below 1
|
// ACOSH - error result (arccos is not defined below 1
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -605,12 +609,13 @@
|
|||||||
|
|
||||||
// ASIN
|
// ASIN
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=asin(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=asin(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekASIN, nil))));
|
RPNFunc(fekASIN, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(arcsin(0.1));
|
sollValues[Row] := CreateNumberArg(arcsin(number));
|
||||||
|
|
||||||
// ASIN - error result (arcsin is not defined outside the interval [-1..1]
|
// ASIN - error result (arcsin is not defined outside the interval [-1..1]
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -623,30 +628,33 @@
|
|||||||
|
|
||||||
// ARCSINH
|
// ARCSINH
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 1.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=asinh(1.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=asinh(1.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(1.1,
|
RPNNumber(1.1,
|
||||||
RPNFunc(fekASINH, nil))));
|
RPNFunc(fekASINH, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(arcsinh(1.1));
|
sollValues[Row] := CreateNumberArg(arcsinh(number));
|
||||||
|
|
||||||
// ATAN
|
// ATAN
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=atan(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=atan(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekATAN, nil))));
|
RPNFunc(fekATAN, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(arctan(0.1));
|
sollValues[Row] := CreateNumberArg(arctan(number));
|
||||||
|
|
||||||
// ATANH - valid result
|
// ATANH - valid result
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=atanh(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=atanh(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekATANH, nil))));
|
RPNFunc(fekATANH, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(arctanh(0.1));
|
sollValues[Row] := CreateNumberArg(arctanh(number));
|
||||||
|
|
||||||
// ATANH - error result (arctan is only defined within ]-1,1[
|
// ATANH - error result (arctan is only defined within ]-1,1[
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -659,21 +667,23 @@
|
|||||||
|
|
||||||
// COS
|
// COS
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=cos(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=cos(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekCOS, nil))));
|
RPNFunc(fekCOS, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(cos(0.1));
|
sollValues[Row] := CreateNumberArg(cos(number));
|
||||||
|
|
||||||
// COSH
|
// COSH
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=cosh(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=cosh(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekCOSH, nil))));
|
RPNFunc(fekCOSH, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(cosh(0.1));
|
sollValues[Row] := CreateNumberArg(cosh(number));
|
||||||
|
|
||||||
// DEGREES
|
// DEGREES
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -686,12 +696,13 @@
|
|||||||
|
|
||||||
// EXP
|
// EXP
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=exp(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=exp(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekEXP, nil))));
|
RPNFunc(fekEXP, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(exp(0.1));
|
sollValues[Row] := CreateNumberArg(exp(number));
|
||||||
|
|
||||||
// INT (positive argument)
|
// INT (positive argument)
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -713,12 +724,13 @@
|
|||||||
|
|
||||||
// LN - valid result
|
// LN - valid result
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=ln(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=ln(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekLN, nil))));
|
RPNFunc(fekLN, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(ln(0.1));
|
sollValues[Row] := CreateNumberArg(ln(number));
|
||||||
|
|
||||||
// LN - error due to argument = 0
|
// LN - error due to argument = 0
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -740,12 +752,13 @@
|
|||||||
|
|
||||||
// LOG10 - valid result
|
// LOG10 - valid result
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=log10(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=log10(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekLOG10, nil))));
|
RPNFunc(fekLOG10, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(log10(0.1));
|
sollValues[Row] := CreateNumberArg(log10(number));
|
||||||
|
|
||||||
// LOG10 - error due to argument = 0
|
// LOG10 - error due to argument = 0
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -767,13 +780,14 @@
|
|||||||
|
|
||||||
// LOG - valid result (2 arguments)
|
// LOG - valid result (2 arguments)
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=log(0.1, 2)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=log(0.1, 2)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNNumber(2,
|
RPNNumber(2,
|
||||||
RPNFunc(fekLOG, 2, nil)))));
|
RPNFunc(fekLOG, 2, nil)))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(logn(2, 0.1));
|
sollValues[Row] := CreateNumberArg(logn(2, number));
|
||||||
|
|
||||||
// LOG - valid result (2 arguments, base missing)
|
// LOG - valid result (2 arguments, base missing)
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -787,12 +801,13 @@
|
|||||||
|
|
||||||
// LOG - valid result (1 argument)
|
// LOG - valid result (1 argument)
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=log(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=log(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekLOG, 1, nil))));
|
RPNFunc(fekLOG, 1, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(logn(10, 0.1));
|
sollValues[Row] := CreateNumberArg(logn(10, number));
|
||||||
|
|
||||||
// LOG - negative base
|
// LOG - negative base
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -883,12 +898,13 @@
|
|||||||
|
|
||||||
// SIN
|
// SIN
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=sin(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=sin(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekSIN, nil))));
|
RPNFunc(fekSIN, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(sin(0.1));
|
sollValues[Row] := CreateNumberArg(sin(number));
|
||||||
|
|
||||||
// SIN of cell value
|
// SIN of cell value
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -901,12 +917,13 @@
|
|||||||
|
|
||||||
// SINH
|
// SINH
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=sinh(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=sinh(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekSINH, nil))));
|
RPNFunc(fekSINH, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(sinh(0.1));
|
sollValues[Row] := CreateNumberArg(sinh(number));
|
||||||
|
|
||||||
// SINH of cell value
|
// SINH of cell value
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -919,12 +936,13 @@
|
|||||||
|
|
||||||
// SQRT - valid result
|
// SQRT - valid result
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=sqrt(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=sqrt(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekSQRT, nil))));
|
RPNFunc(fekSQRT, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(sqrt(0.1));
|
sollValues[Row] := CreateNumberArg(sqrt(number));
|
||||||
|
|
||||||
// SQRT - error (negative argument)
|
// SQRT - error (negative argument)
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -946,12 +964,13 @@
|
|||||||
|
|
||||||
// TAN - valid result
|
// TAN - valid result
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=tan(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=tan(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekTAN, nil))));
|
RPNFunc(fekTAN, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(tan(0.1));
|
sollValues[Row] := CreateNumberArg(tan(number));
|
||||||
|
|
||||||
// TAN - error (argument = pi/2)
|
// TAN - error (argument = pi/2)
|
||||||
// This test is omitted because it is difficult to exactly hit pi/2.
|
// This test is omitted because it is difficult to exactly hit pi/2.
|
||||||
@ -967,12 +986,13 @@
|
|||||||
|
|
||||||
// TANH
|
// TANH
|
||||||
inc(Row);
|
inc(Row);
|
||||||
|
number := 0.1;
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=tanh(0.1)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=tanh(0.1)');
|
||||||
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula(
|
||||||
RPNNumber(0.1,
|
RPNNumber(0.1,
|
||||||
RPNFunc(fekTANH, nil))));
|
RPNFunc(fekTANH, nil))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(tanh(0.1));
|
sollValues[Row] := CreateNumberArg(tanh(number));
|
||||||
|
|
||||||
// TANH of cell value
|
// TANH of cell value
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1222,8 +1242,11 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekAVEDEV, 5, nil))))))));
|
RPNFunc(fekAVEDEV, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(mean([0.0, 0.1, 0.2, 0.1, 0.2]));
|
number := mean(STATS_NUMBERS);
|
||||||
// these values are the absolute deviations from mean (1.0)
|
for k := 0 to High(STATS_NUMBERS) do numberArray[k] := abs(STATS_NUMBERS[k] - number);
|
||||||
|
// these values are the absolute deviations from mean (1.0)
|
||||||
|
sollValues[Row] := CreateNumberArg(mean(numberArray));
|
||||||
|
|
||||||
// AVERAGE
|
// AVERAGE
|
||||||
inc(Row);
|
inc(Row);
|
||||||
MyWorksheet.WriteUTF8Text(Row, 0, '=AVERAGE(1, 1.1, 1.2, 0.9, 0.8)');
|
MyWorksheet.WriteUTF8Text(Row, 0, '=AVERAGE(1, 1.1, 1.2, 0.9, 0.8)');
|
||||||
@ -1235,7 +1258,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekAVERAGE, 5, nil))))))));
|
RPNFunc(fekAVERAGE, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(mean([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(mean(STATS_NUMBERS));
|
||||||
|
|
||||||
// AVERAGE of cell block
|
// AVERAGE of cell block
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1392,7 +1415,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekMAX, 5, nil))))))));
|
RPNFunc(fekMAX, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(MaxValue([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(MaxValue(STATS_NUMBERS));
|
||||||
|
|
||||||
// MAX of cell range (no empty cells)
|
// MAX of cell range (no empty cells)
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1423,7 +1446,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekMIN, 5, nil))))))));
|
RPNFunc(fekMIN, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(MinValue([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(MinValue(STATS_NUMBERS));
|
||||||
|
|
||||||
// PRODUCT
|
// PRODUCT
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1436,7 +1459,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekPRODUCT, 5, nil))))))));
|
RPNFunc(fekPRODUCT, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(1.0*1.1*1.2*0.9*0.8);
|
sollValues[Row] := CreateNumberArg(STATS_NUMBERS[0]*STATS_NUMBERS[1]*STATS_NUMBERS[2]*STATS_NUMBERS[3]*STATS_NUMBERS[4]);
|
||||||
|
|
||||||
// STDEV
|
// STDEV
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1449,7 +1472,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekSTDEV, 5, nil))))))));
|
RPNFunc(fekSTDEV, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(StdDev([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(StdDev(STATS_NUMBERS));
|
||||||
|
|
||||||
// STDEVP
|
// STDEVP
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1462,7 +1485,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekSTDEVP, 5, nil))))))));
|
RPNFunc(fekSTDEVP, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(PopnStdDev([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(PopnStdDev(STATS_NUMBERS));
|
||||||
|
|
||||||
// SUM
|
// SUM
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1475,7 +1498,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekSUM, 5, nil))))))));
|
RPNFunc(fekSUM, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(Sum([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(Sum(STATS_NUMBERS));
|
||||||
|
|
||||||
if AFormat <> sfExcel2 then begin
|
if AFormat <> sfExcel2 then begin
|
||||||
// SUMSQ
|
// SUMSQ
|
||||||
@ -1489,7 +1512,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekSUMSQ, 5, nil))))))));
|
RPNFunc(fekSUMSQ, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(SumOfSquares([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(SumOfSquares(STATS_NUMBERS));
|
||||||
|
|
||||||
// SUMIF
|
// SUMIF
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1558,7 +1581,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekVAR, 5, nil))))))));
|
RPNFunc(fekVAR, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(Variance([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(Variance(STATS_NUMBERS));
|
||||||
|
|
||||||
// VARP
|
// VARP
|
||||||
inc(Row);
|
inc(Row);
|
||||||
@ -1571,7 +1594,7 @@
|
|||||||
RPNNumber(0.8,
|
RPNNumber(0.8,
|
||||||
RPNFunc(fekVARP, 5, nil))))))));
|
RPNFunc(fekVARP, 5, nil))))))));
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := CreateNumberArg(PopnVariance([1.0, 1.1, 1.2, 0.9, 0.8]));
|
sollValues[Row] := CreateNumberArg(PopnVariance(STATS_NUMBERS));
|
||||||
|
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
|
Reference in New Issue
Block a user