1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-05-12 12:00:14 +00:00

Compare commits

...

3 commits

Author SHA1 Message Date
Cory Smith 391983b6da Github complaining about v2 of checkout, upgrading to v4 (latest). 2023-10-15 10:25:29 -05:00
Cory Smith f785c79164
Merge pull request #55 from DualBrain/master
Fix incorrect exponent (off by 1) for "large" values when converting …
2023-10-15 10:15:30 -05:00
Cory Smith c9e0fc37a1 Fix incorrect exponent (off by 1) for "large" values when converting from numeric to string. 2023-10-15 10:08:20 -05:00
4 changed files with 58 additions and 6 deletions

View file

@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, 'ci-skip')"
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt update && sudo apt install libglu1-mesa-dev libncurses-dev
- name: Bootstrap compiler

View file

@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, 'ci-skip')"
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt update && sudo apt install libglu1-mesa-dev libncurses-dev
- name: Bootstrap compiler

View file

@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, 'ci-skip')"
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt update && sudo apt install libglu1-mesa-dev libncurses-dev
- name: Bootstrap compiler
@ -29,7 +29,7 @@ jobs:
runs-on: macos-latest
if: "!contains(github.event.head_commit.message, 'ci-skip')"
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Bootstrap compiler
run: .ci/bootstrap.sh osx
- name: Compile
@ -49,7 +49,7 @@ jobs:
env:
PLATFORM: x86
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Bootstrap compiler
run: .ci/bootstrap32.bat
- name: Compile
@ -70,7 +70,7 @@ jobs:
env:
PLATFORM: x64
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Bootstrap compiler
run: .ci/bootstrap.bat
- name: Compile

View file

@ -6948,9 +6948,58 @@ qbs *qbs_str(float value){
qbs *qbs_str(double value){
static qbs *tqbs;
tqbs=qbs_new(32,1);
static char ch;
static int32 l,i,i2,i3,digits,exponent;
static int32 mult,exp,index;
l=sprintf((char*)&qbs_str_buffer,"% .15E",value);
// the "new version"...
// scan the result (in reverse) to determine the exponent.
exponent = 0; mult = 1;
for (i = l; i > 0; i--) {
if (!(qbs_str_buffer[i] == 0 || qbs_str_buffer[i] == 32)) { // not null or space...
if (qbs_str_buffer[i] == 43) {
break; // if a +, exit for.
} else if (qbs_str_buffer[i] == 45) {
exponent = -exponent;
break; // a -, negate exponent and exit for.
} else {
exponent += (qbs_str_buffer[i] - 48) * mult;
mult *= 10;
}
}
}
digits = 0; exp = 0;
for (i = l; i > 0; i--) {
if (exp == 0) {
if (qbs_str_buffer[i] == 69) { exp = i; } // location of the E
} else if (qbs_str_buffer[i] != 48 && qbs_str_buffer[i] != 46) {
digits = i; break;
}
}
if (digits==0){
tqbs->len=2; tqbs->chr[0]=32; tqbs->chr[1]=48; // tqbs=[space][0]
return tqbs;
}
if (exponent >= 16 || exponent <= -17) {
index=0;
for (i = 0; i < digits + 1; i++) {
ch = qbs_str_buffer[i];
tqbs->chr[index++] = ch;
}
tqbs->chr[index++] = 68;
for (i = exp + 1; i < l; i++) {
ch = qbs_str_buffer[i];
tqbs->chr[index++] = ch;
}
tqbs->len=index;
return tqbs;
}
/* ----- the "old way"; which has problems with formatting certain exponents properly.
//IMPORTANT: assumed l==23
if (l==22){memmove(&qbs_str_buffer[21],&qbs_str_buffer[20],2); qbs_str_buffer[20]=48; l=23;}
@ -6979,6 +7028,7 @@ qbs *qbs_str(double value){
if (qbs_str_buffer[19]==45) exponent=-exponent;
//OLD if ((exponent<=15)&&((exponent-digits)>=-16)) goto asdecimal;
if ((exponent<=15)&&((exponent-digits)>=-17)) goto asdecimal;
//fix up exponent to conform to QBASIC standards
//i. cull trailing 0's after decimal point (use digits to help)
//ii. cull leading 0's of exponent
@ -6997,6 +7047,8 @@ qbs *qbs_str(double value){
return tqbs;
/////////////////////
asdecimal:
*/
//calculate digits after decimal point in var. i
i=-(exponent-digits+1);
if (i<0) i=0;