Comments (1)
private boolean executeMF_INT() { // 2014-03-16 gt
if (!evalNumericExpression()) return false;
Double iD = EvalNumericExpressionValue;
if (!iD.isNaN() && !iD.isInfinite()){ //2018-01-15gt
EvalNumericExpressionIntValue = EvalNumericExpressionValue.longValue();
EvalNumericExpressionValue = Double.valueOf(EvalNumericExpressionIntValue);
}//2018-01-15gt
VarIsInt = true;
return true;
}
private boolean executeMF_FRAC() { // 2014-03-16 gt
if (!evalNumericExpression())
return false;
//Old version does not work correctly with big numbers like 4.5678879E8
String str = EvalNumericExpressionValue.toString();
Double iD = EvalNumericExpressionValue;
if (!iD.isNaN() && !iD.isInfinite()){ //2018-01-15gt
if (str.indexOf("E") > -1) {//vv2017-04-15gt
str = new BigDecimal(EvalNumericExpressionValue).toPlainString();//2017-05-05gt
//str = String.format(Locale.US,"%.18f", new BigDecimal(EvalNumericExpressionValue));
} //^^2017-04-15gt
String sgn = (EvalNumericExpressionValue < 0) ? "-" : "";
int point = str.indexOf('.');
EvalNumericExpressionValue = (point < 0) ? 0.0
: Double.parseDouble(sgn + str.substring(point));
} //2018-01-15gt
return true;
}
private boolean executeMF_base(int base) { // BIN, OCT, or HEX, depending on the base parameter
if (!getStringArg()) return false; // Get and check the string expression
if (base == 2){//BIN()//vv2018-01-15gt
if (StringConstant.equals("111111111111000000000000000000000000000000000000000000000000000")){//IEEE 754, "NaN";
EvalNumericExpressionValue = Math.sqrt(-1);
return true;
}
if (StringConstant.equals("111111111110000000000000000000000000000000000000000000000000000")){//IEEE 754, +Infinitive
EvalNumericExpressionValue = 1.0/0;
return true;
}
if (StringConstant.equals("1111111111110000000000000000000000000000000000000000000000000000")){ //IEEE 754, -Infinitive
EvalNumericExpressionValue = -1.0/0;
return true;
}
}
if (base == 8){//OCT()
if (StringConstant.equals("777700000000000000000")){//IEEE 754, "NaN";
EvalNumericExpressionValue = Math.sqrt(-1);
return true;
}
if (StringConstant.equals("777600000000000000000")){//IEEE 754, +Infinitive
EvalNumericExpressionValue = 1.0/0;
return true;
}
if (StringConstant.equals("1777600000000000000000")){ //IEEE 754, -Infinitive
EvalNumericExpressionValue = -1.0/0;
return true;
}
}
if (base == 16){//HEX()
if (StringConstant.equals("7ff8000000000000")){//IEEE 754, "NaN";
EvalNumericExpressionValue = Math.sqrt(-1);
return true;
}
if (StringConstant.equals("7ff0000000000000")){//IEEE 754, +Infinitive
EvalNumericExpressionValue = 1.0/0;
return true;
}
if (StringConstant.equals("fff0000000000000")){ //IEEE 754, -Infinitive
EvalNumericExpressionValue = -1.0/0;
return true;
}
}//^^2018-01-15gt
try {
EvalNumericExpressionIntValue = new BigInteger(StringConstant, base).longValue();
EvalNumericExpressionValue = EvalNumericExpressionIntValue.doubleValue();
VarIsInt = true;
} catch (NumberFormatException e) {
return RunTimeError("Not a valid number: " + StringConstant);
}
return true;
}
private boolean executeSF_INT() { // INT$
if (!evalNumericExpression()) return false;
if (!isNext(')')) return false; // Function must end with ')'
Double testIsN = EvalNumericExpressionValue;//vv2018-01-15gt
if (testIsN.isNaN()){
StringConstant = "NaN";
}else if (testIsN.isInfinite()){
StringConstant = "Infinity";
if (testIsN < 0)StringConstant = "-Infinity";
}else{ //^^2018-01-15gt
long val = EvalNumericExpressionValue.longValue();
StringConstant = Long.toString(val);
} //2018-01-15gt
return true;
}
private boolean executeSF_HEX() { // HEX$
if (!evalNumericExpression()) return false;
if (!isNext(')')) return false; // Function must end with ')'
Double testIsN = EvalNumericExpressionValue; //vv2018-01-15gt
if (testIsN.isNaN()){
StringConstant = "7ff8000000000000"; //IEEE 754, "NaN";
}else if (testIsN.isInfinite()){
StringConstant = "7ff0000000000000"; //IEEE 754, +Infinitive
if (testIsN < 0)StringConstant = "fff0000000000000"; //IEEE 754, -Infinitive
}else{ //^^2018-01-15gt
long val = EvalNumericExpressionValue.longValue();
StringConstant = Long.toHexString(val);
} //2018-01-15gt
return true;
}
private boolean executeSF_OCT() { // OCT$
if (!evalNumericExpression()) return false;
if (!isNext(')')) return false; // Function must end with ')'
Double testIsN = EvalNumericExpressionValue; //vv2018-01-15gt
if (testIsN.isNaN()){
StringConstant = "777700000000000000000"; //IEEE 754, "NaN";
}else if (testIsN.isInfinite()){
StringConstant = "777600000000000000000"; //IEEE 754, +Infinitive
if (testIsN < 0)StringConstant = "1777600000000000000000"; //IEEE 754, -Infinitive
}else{ //^^2018-01-15gt
long val = EvalNumericExpressionValue.longValue();
StringConstant = Long.toOctalString(val);
} //2018-01-15gt
return true;
}
private boolean executeSF_BIN() { // BIN$
if (!evalNumericExpression()) return false;
if (!isNext(')')) return false; // Function must end with ')'
Double testIsN = EvalNumericExpressionValue; //vv2018-01-15gt
if (testIsN.isNaN()){
StringConstant = "111111111111000000000000000000000000000000000000000000000000000"; //IEEE 754, "NaN";
}else if (testIsN.isInfinite()){
StringConstant = "111111111110000000000000000000000000000000000000000000000000000"; //IEEE 754, +Infinitive
if (testIsN < 0)StringConstant = "1111111111110000000000000000000000000000000000000000000000000000"; //IEEE 754, -Infinitive
}else{ //^^2018-01-15gt
long val = EvalNumericExpressionValue.longValue();
StringConstant = Long.toBinaryString(val);
} //2018-01-15gt
return true;
}
Also supported IEEE 754, Infinitive now.
Gregor
from basic.
Related Issues (20)
- instanceof Fails HOT 2
- Assets with a folder structure are not readable directly
- SENSORS.LIST names not all 20 standard sensor types.
- VOLKEYS.ON / VOLKEYS.OFF
- STT.RESULTS list variable is not reset at program start
- GR.CAMERA. _ _ _SHOOT The file name extension from "image.png" is wrong in a case of jpeg compression
- BYTE.WRITE.BUFFER is very slow
- The Editor stops until REPLACE ALL in Search is used with empty search string
- ROUND Input of NaN (Not a Number) Value returns 0.0 or crashes if the scale is specified. HOT 1
- USING$ Input of a NaN (Not a Number) Value for arguments needing Integer or Long values returns 0 HOT 1
- IF with a single NaN value returns **true**, but that is **wrong** HOT 3
- Command Round, double import is to unprecise
- Timer.set <value> -- cannot use a var for <value> HOT 1
- GrabURL reads cache
- On Oreo getting sensor data fails if the returned data array length is lower than three
- [Suggestion] Make the project compatible to Android Studio
- NaN and Infinity issue with gr.arc and gr. modify HOT 1
- Out-of-bound GR.BITMAP.CROP crashes BASIC HOT 1
- User apks without permission crash at startup HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from basic.