1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

builtin: float.v + remove #include <math.h>

This commit is contained in:
Alexander Medvednikov
2019-10-15 04:46:40 +03:00
parent 4b176ba855
commit f9593bd857
4 changed files with 121 additions and 122 deletions

View File

@@ -4,130 +4,12 @@
module builtin
#include <float.h>
#include <math.h>
pub fn (d f64) str() string {
buf := malloc(sizeof(double) * 5 + 1)// TODO
C.sprintf(*char(buf), '%f', d)
return tos(buf, vstrlen(buf))
}
pub fn (d f32) str() string {
buf := malloc(sizeof(double) * 5 + 1)// TODO
C.sprintf(*char(buf), '%f', d)
return tos(buf, vstrlen(buf))
}
pub fn ptr_str(ptr voidptr) string {
buf := malloc(sizeof(double) * 5 + 1)// TODO
C.sprintf(*char(buf), '%p', ptr)
return tos(buf, vstrlen(buf))
}
// compare floats using C epsilon
// ==
pub fn (a f64) eq(b f64) bool {
$if windows {
$if tinyc {
return a -b <= 0.01
} $else {
return C.fabs(a - b) <= C.DBL_EPSILON
}
} $else {
return C.fabs(a - b) <= C.DBL_EPSILON
}
}
pub fn (a f32) eq(b f32) bool {
$if windows {
$if tinyc {
return a -b <= 0.01
} $else {
return C.fabsf(a - b) <= C.FLT_EPSILON
}
} $else {
return C.fabsf(a - b) <= C.FLT_EPSILON
}
}
pub fn (a f64) eqbit(b f64) bool {
return C.DEFAULT_EQUAL(a, b)
}
pub fn (a f32) eqbit(b f32) bool {
return C.DEFAULT_EQUAL(a, b)
}
// !=
fn (a f64) ne(b f64) bool {
return !a.eq(b)
}
fn (a f32) ne(b f32) bool {
return !a.eq(b)
}
pub fn (a f64) nebit(b f64) bool {
return C.DEFAULT_NOT_EQUAL(a, b)
}
pub fn (a f32) nebit(b f32) bool {
return C.DEFAULT_NOT_EQUAL(a, b)
}
// a < b
fn (a f64) lt(b f64) bool {
return a.ne(b) && a.ltbit(b)
}
fn (a f32) lt(b f32) bool {
return a.ne(b) && a.ltbit(b)
}
fn (a f64) ltbit(b f64) bool {
return C.DEFAULT_LT(a, b)
}
fn (a f32) ltbit(b f32) bool {
return C.DEFAULT_LT(a, b)
}
// a <= b
fn (a f64) le(b f64) bool {
return !a.gt(b)
}
fn (a f32) le(b f32) bool {
return !a.gt(b)
}
fn (a f64) lebit(b f64) bool {
return C.DEFAULT_LE(a, b)
}
fn (a f32) lebit(b f32) bool {
return C.DEFAULT_LE(a, b)
}
// a > b
fn (a f64) gt(b f64) bool {
return a.ne(b) && a.gtbit(b)
}
fn (a f32) gt(b f32) bool {
return a.ne(b) && a.gtbit(b)
}
fn (a f64) gtbit(b f64) bool {
return C.DEFAULT_GT(a, b)
}
fn (a f32) gtbit(b f32) bool {
return C.DEFAULT_GT(a, b)
}
// a >= b
fn (a f64) ge(b f64) bool {
return !a.lt(b)
}
fn (a f32) ge(b f32) bool {
return !a.lt(b)
}
fn (a f64) gebit(b f64) bool {
return C.DEFAULT_GE(a, b)
}
fn (a f32) gebit(b f32) bool {
return C.DEFAULT_GE(a, b)
}
// fn (nn i32) str() string {
// return i
// }