Commit Graph

1858 Commits

Author SHA1 Message Date
Hugo Saint-Vignes
522456677a [poincare] Add an Array class to factorize Matrix and Grid methods
Change-Id: Ia61caf0bf182c1111119740d43d957f203c0975c
2020-11-19 11:41:29 +01:00
Hugo Saint-Vignes
bee8d8531b [poincare] Handle horizontal vectors
Change-Id: I98088b2b9f2dbc0549795a5c3eed4787fea70068
2020-11-19 11:41:29 +01:00
Hugo Saint-Vignes
73b5b0775a [poincare] Avoid nullptr context on non-Numbers sign and nullStatus methods
Change-Id: I3361344c1e0b50cdbe999d6ea50025022a51f603
2020-11-16 17:12:42 +01:00
Léa Saviot
4df996cfd2 [poincare/expression_node] TODO: use ReductionContext via pointers 2020-11-09 15:50:27 +01:00
Léa Saviot
5df60e946a [poincare] shallowBeautify can modify the reduction context
UnitConvert must set UnitConversion to None, otherwise the unit asked
for in the conversion might get changed after being properly set in
UnitConvert::shallowBeautify.
2020-11-09 15:50:27 +01:00
Émilie Feral
d789e8da97 [poincare] In Multiplication::shallowBeautify, when extracting the unit,
reduce without changing the unit in order to extract the right unit.

This fixes the following bug: simplify "πππ23*_cK"
2020-11-06 14:51:49 +01:00
Émilie Feral
7142f9545e [poincare] Finish replacing approximateContext 2020-11-04 15:58:41 +01:00
Léa Saviot
f8b3156f19 [poincare] Start replacing approximateContext 2020-11-04 15:58:41 +01:00
Léa Saviot
644cf4dcf3 [poincare] Step II: create ApproximateContext 2020-11-04 15:58:40 +01:00
Émilie Feral
75dc415e27 [poincare] Step I: add a parameter to approximation routines to indicate
if we're within a reduction routine
2020-11-04 15:58:40 +01:00
Hugo Saint-Vignes
42f20fb58d [poincare] Add NullStatus and sign for more complex expressions
Change-Id: Ic593517bf7a983985fe3c521e10c19ab0bca4191
2020-11-04 15:58:34 +01:00
Hugo Saint-Vignes
61d33be2a7 [poincare] Add NullStatus and sign for more expressions
Change-Id: I4443a28532f5b728afe169a3d2a70d9026bc1909
2020-11-04 15:58:34 +01:00
Hugo Saint-Vignes
4a3f749cc6 [poincare] Add NullStatus for expressions
Change-Id: Ibaba72e3e3589ba259c7b22d402e2b27937f27c1
2020-11-04 15:58:34 +01:00
Hugo Saint-Vignes
98499f6c9f [poincare] Rename isRationalZero to isNumberZero
Change-Id: I554dd5e9b9ab3af4364ca23cde590f9e0a458ef8
2020-11-04 15:58:33 +01:00
Hugo Saint-Vignes
58114255e5 [poincare] implement isRationalZero for other numbers
Change-Id: I40f61958f9e51adb376407b2a512097962979417
2020-11-04 15:58:33 +01:00
Hugo Saint-Vignes
0d883bfb19 [poincare] Handle division by 0 when combining powers
Change-Id: I108ba8131ef2f8d3d210a769322a815121311f6b
2020-11-04 15:58:32 +01:00
Gabriel Ozouf
f491be2db5 [poincare/zoom] Accelerate normal range search
Change-Id: I4a7f2e024ca82a3996ad3e395c8f62ca4170ec9e
2020-11-04 15:58:24 +01:00
Gabriel Ozouf
c647bfe566 [poincare/zoom] Clean up and comment API
Change-Id: I58347d7188551471817fb334bcb54d5c5b398f72
2020-11-04 15:58:23 +01:00
Gabriel Ozouf
c4cd3ecffa [poincare/zoom] Factor range sanitation
Checking wether the range that has been computed is suitable is now
done in Poincare::Zoom by SanitizeRange.

Change-Id: Ib7ff73a3beae29996b1a773744021ad85c6ba946
2020-11-04 15:58:22 +01:00
Gabriel Ozouf
b10be2c60c [poincare/zoom] Method SanitizeRange
Create a method to clean up an ill-formed range, ie a range whose bounds
are not finite, or where max <= min.

Change-Id: If4525e65f95385cfa970be72bbcc21ad84286bfa
2020-11-04 15:58:22 +01:00
Gabriel Ozouf
1bfeeb5842 [poincare/zoom] Detect explosions
Add a clause in InterestingRangesForDisplay to detect strong variations.
This improve the graph for x^x or x^2+x+1 for instance.

Change-Id: I74214c2382cfe4b0e2603556dd8c6cbd450effc0
2020-11-04 15:58:20 +01:00
Gabriel Ozouf
6be5e7d62c [apps/shared] Change Zoom API
Moved some code around to decrease redundancy and put more of the logic
into Poincare::Zoom

Change-Id: I4804cf39493ac7f2f0b3c4eb554e5c15c3cef1c9
2020-11-04 15:58:18 +01:00
Gabriel Ozouf
8572f4953c [poincare/zoom] Method CombineRanges
The logic behind combining several ranges will be handled by the Zoom
class directly.

Change-Id: I4de3f020d94b9bc1a21953b0c416158c65beb606
2020-11-04 15:58:18 +01:00
Gabriel Ozouf
81e425eb04 [poincare/zoom] Method FullRange
Change-Id: Ibfaa0b694afecab312199b20b102a57901f34ae7
2020-11-04 15:58:17 +01:00
Gabriel Ozouf
09c061e871 [poincare/zoom] Method RangeFromSingleValue
This method adds margins to a range whose bounds are equal.

Change-Id: I2b2fe26fe431deda112389060d401f738a75b1ae
2020-11-04 15:58:17 +01:00
Gabriel Ozouf
a525c35ebb [poincare/zoom] Factor constants
The mantissas {1, 2, 5} used in CurveViewRange to compute the grid units
can be factored in Zoom.

Change-Id: I2bcc9b9df1ff6b6df82092a5d78ed3db132bf63a
2020-11-04 15:58:17 +01:00
Gabriel Ozouf
403315f6ac [poincare/zoom] Find range with specific ratio
Change-Id: Id0c816c42e3fa93519241bf53f920c333e204af1
2020-11-04 15:58:15 +01:00
Gabriel Ozouf
08c96c5107 [poincare/zoom] Method SetToRatio
Added a method to Zoom to set a range to a specific ratio. This method
is used by InteractiveCurveViewRange::normalize.

Change-Id: Id3029439294ece02ea19fb6c6de90b9edc85d771
2020-11-04 15:58:14 +01:00
Gabriel Ozouf
c4aad1641e [poincare/zoom] Rename k_defaultMaxInterval
Bring it in line with k_minimalDistance which as a similar role.

Change-Id: Ifc3ad793e8b5ff1e7f2598d0665abdd5c954e61f
2020-11-04 15:58:14 +01:00
Gabriel Ozouf
ad6edffc07 [poincare/zoom] Remove tuneXRange argument
The ability to perform a range search without changing the X range was
only there to accomodate the Yauto feature.

Change-Id: I8c2b61b447fbd3dc1f4e303dff06d1a8d6e7a4f2
2020-11-04 15:58:14 +01:00
Gabriel Ozouf
d2b36be846 [poincare/zoom] Move automatic zoom to Poincare
Change-Id: I7a70ab54b33b9150682cc4f999ff4999a8288b7f
2020-11-04 15:58:07 +01:00
Gabriel Ozouf
bc7ca057a0 [apps/calculation] Add Joules to results on energy
Change-Id: Ib775b1bd2bac1fd3bf755a9a4d3d5b3739a67cfa
2020-11-04 15:33:02 +01:00
Gabriel Ozouf
10f8e2f507 [poicare/unit] Rename method
hasAdditionalExpressions -> hasSpecialAdditionalExpressions

Change-Id: Ia5200402b23ab5adf0f94dabe027955a86d1174d
2020-11-04 15:33:02 +01:00
Hugo Saint-Vignes
073893ae48 [poincare] Exact undef results with GCD and LCM
Change-Id: Iba39cd6140d8ef5b3fd24e0f53c9e28fbd57d438
2020-11-04 15:33:01 +01:00
Gabriel Ozouf
3f19d66c78 [poincare/unit] Change temperature symbols
Celsius and Fahrenheit now use the degree symbol °.
  _Cel -> _°C
  _Fah -> _°F

Change-Id: Ic5935d3a6263a556692bebb6254b6b6d4de48431
2020-11-04 15:33:00 +01:00
Gabriel Ozouf
d37540f032 [poincare/unit] Add Celsius and Fahrenheit
Temperatures can be converted to and from degree Celsius and Fahrenheit.
When used in non-trivial calculations, they are always reduced to undef,
as the rules for manipulating relative scales are not well defined.

Change-Id: If59e224a0e7f940b421bc894bbe2279c90f38d04
2020-11-04 15:33:00 +01:00
Arthur Camouseigt
913c81a0d3 [solver] Modified the way to solve some equations
The solutions of equations that need numerical approximations to be
solved are now computed base on the undeveloped equation (instead of
fully the expended one used to identify polynomials)

This allow (x-10)^7=0 to yield x=10 as result (9.95 before)
Change-Id: Ia8acbe57a9cfebf0b5016e9c896d21c8ddac7a64
2020-11-04 15:32:59 +01:00
Arthur Camouseigt
1d71a14d2c [Context] Modifying context method signature for sequences
This allows sequences to be used in functions by calling u(x)

Change-Id: I336e84a19bf9b3dd0f2e435d1aaebda3c9e71ec8
2020-11-04 15:32:58 +01:00
Arthur Camouseigt
3dca515441 [VariableBox] Added sequences to the variable box
It is now possible to call the value of a defined sequence anywhere.

Change-Id: I1990e93c50f9add175b7ea274e07004ba63289e5
2020-11-04 15:32:58 +01:00
Arthur Camouseigt
ed358590ce [Sequence] Changed the way sequences are parsed
Change-Id: If19b46a317e4f336ac857690827ab08e147ac75a
2020-11-04 15:32:58 +01:00
Arthur Camouseigt
8434da60ef [sequence] Changed sequences behavior
Sequences can now be defined using specific terms form other sequences :
Un = n
Vn = u(3)

Initial values can also depend on other sequences.
Should there be a circular dependency, the sequences concerned will
display "undef" as value

Change-Id: I6fe1f3ff7b500f35d480ddefb42de729c327432e
2020-11-04 15:32:58 +01:00
Arthur Camouseigt
1995781a9f [Poincare/IEEE754] Changed methods to use std function
Implemented std::nextafter to replace hand made one.
Methods next and previous are no longer making the difference between -0
and +0

Change-Id: I42e1a073623b70656d9df954694803840cf3088c
2020-11-04 15:30:53 +01:00
Gabriel Ozouf
0ed0cc56e9 [poincare] Remove characteristicXHalfRange
Method characteristicXHalfRange was used to compute the range on which
to display cartesian function in Graph. With the new zoom algorithm,
this method is deprecated.

Change-Id: Ic681fab8d58d0f5628a94302a7b49dacaaa1a6a3
2020-11-04 15:30:53 +01:00
Gabriel Ozouf
860ce558c2 [poincare/unit] Remove some additional results
Imperial additional results now only appear when the selected unit
system is Imperial.

Change-Id: Icc314d0148810bea67e4d729179393f1fceaf214
2020-11-04 15:11:45 +01:00
Gabriel Ozouf
801c61549c [poincare/unit] Change units for volume split
In additional outputs, a volume is now splitted as :
  _gal+_qt+_pt+_cup
instead of :
  _gal+_cup+_floz

Change-Id: I5020afbab23be6331d8a8742fd6295db178f0b37
2020-11-04 15:11:45 +01:00
Gabriel Ozouf
5e06f62ff6 [poincare/unit] Symbols for cup and tablespoon
_cp   -> _cup
_Tbsp -> _tbsp

Change-Id: Ied3e1624edc980f76c2f775cbb9e6028db8a83c5
2020-11-04 15:11:45 +01:00
Gabriel Ozouf
52dcd8e749 [poincare/unit] Restructure Unit
1. Information about a unit's dimension now uses inheritance.
   _m is an instance of DistanceAlias, which is derived from Alias.
   A UnitNode now keeps a pointer to an Alias and one to a Prefix.
   All aliases are still defined as constexpr.
   This cleans up a lot of the code used namely for computing the
   additional outputs in Calculation.

2. Instead of being defined with a string, each unit is described by its
   ratio with the base SI unit (ex: _L is 0.001 instead of "0.001_m^3").
   This greatly speeds up the calculations using units, as the algorithm
   to find the best unit used to parse the definition.

Change-Id: I4d6ed6ad4cb967026a3f01a335aec270066e2b9f
2020-11-04 15:11:45 +01:00
Gabriel Ozouf
1f3c4b66a0 [poincare/unit] Changed imperial units definitions
Imperial units are now defined directly from the base unit, instead of
building on one another.

Change-Id: Ieb020643983ef49092d2d3033a7cc2135c646015
2020-11-04 15:11:45 +01:00
Gabriel Ozouf
f288573db0 [apps/unit] Add short and long tons
Change-Id: Ib48c6a7c773e9e1d18c9f55e6dda5330fe0a28f9
2020-11-04 15:11:44 +01:00
Gabriel Ozouf
284c501532 [apps/unit] Add restriction to some input prefixes
The symbol for pint (_pt) conflicts with the symbol for pico-tonne. To
solve that, prefixes for tonnes are now restricted to the positive
prefixes : k, M, G, T.

Change-Id: Ie968374bbb5e0ebd2c0f08e4b1bdc1708eb6a041
2020-11-04 15:11:44 +01:00