mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-20 22:30:30 +01:00
Upgrade to MicroPython 1.9.3
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* This file is part of the Micro Python project, http://micropython.org/
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <math.h>
|
||||
#include "py/formatfloat.h"
|
||||
|
||||
/***********************************************************************
|
||||
@@ -68,12 +69,10 @@ union floatbits {
|
||||
uint32_t u;
|
||||
};
|
||||
static inline int fp_signbit(float x) { union floatbits fb = {x}; return fb.u & FLT_SIGN_MASK; }
|
||||
static inline int fp_isspecial(float x) { union floatbits fb = {x}; return (fb.u & FLT_EXP_MASK) == FLT_EXP_MASK; }
|
||||
static inline int fp_isinf(float x) { union floatbits fb = {x}; return (fb.u & FLT_MAN_MASK) == 0; }
|
||||
#define fp_isnan(x) isnan(x)
|
||||
#define fp_isinf(x) isinf(x)
|
||||
static inline int fp_iszero(float x) { union floatbits fb = {x}; return fb.u == 0; }
|
||||
static inline int fp_isless1(float x) { union floatbits fb = {x}; return fb.u < 0x3f800000; }
|
||||
// Assumes both fp_isspecial() and fp_isinf() were applied before
|
||||
#define fp_isnan(x) 1
|
||||
|
||||
#elif MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_DOUBLE
|
||||
|
||||
@@ -82,9 +81,7 @@ static inline int fp_isless1(float x) { union floatbits fb = {x}; return fb.u <
|
||||
#define FPROUND_TO_ONE 0.999999999995
|
||||
#define FPDECEXP 256
|
||||
#define FPMIN_BUF_SIZE 7 // +9e+199
|
||||
#include <math.h>
|
||||
#define fp_signbit(x) signbit(x)
|
||||
#define fp_isspecial(x) 1
|
||||
#define fp_isnan(x) isnan(x)
|
||||
#define fp_isinf(x) isinf(x)
|
||||
#define fp_iszero(x) (x == 0)
|
||||
@@ -118,11 +115,11 @@ int mp_format_float(FPTYPE f, char *buf, size_t buf_size, char fmt, int prec, ch
|
||||
*s++ = '?';
|
||||
}
|
||||
if (buf_size >= 1) {
|
||||
*s++ = '\0';
|
||||
*s = '\0';
|
||||
}
|
||||
return buf_size >= 2;
|
||||
}
|
||||
if (fp_signbit(f)) {
|
||||
if (fp_signbit(f) && !fp_isnan(f)) {
|
||||
*s++ = '-';
|
||||
f = -f;
|
||||
} else {
|
||||
@@ -135,7 +132,7 @@ int mp_format_float(FPTYPE f, char *buf, size_t buf_size, char fmt, int prec, ch
|
||||
// It is buf_size minus room for the sign and null byte.
|
||||
int buf_remaining = buf_size - 1 - (s - buf);
|
||||
|
||||
if (fp_isspecial(f)) {
|
||||
{
|
||||
char uc = fmt & 0x20;
|
||||
if (fp_isinf(f)) {
|
||||
*s++ = 'I' ^ uc;
|
||||
|
||||
Reference in New Issue
Block a user