feat(lang): float and double types with ordinary operators
`float` (32-bit) and `double` (64-bit) with + - * / %, comparisons and unary minus. Decimal literals take their type from context and stay `fixed` elsewhere; int and long promote implicitly (LUDIC_WARN_FLOAT_PROMOTE=1 lists every promotion). float(), double(), int(), long() and fixed() convert; floats(n)/doubles(n) buffers; float fields, globals, constants and parameters; Math.* computes in float for float arguments; string/print write the shortest round-tripping decimal; float_bits/float_from_bits expose the bits. @deterministic code may not use floats. The f_* runtime helpers stay as they are. Editors know the new type words; the JetBrains plugin is 1.5.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
f92d7f89c6
commit
e010c2cecc
40 changed files with 67726 additions and 57272 deletions
24
docs/language/builtins/fn-float_bits.md
Normal file
24
docs/language/builtins/fn-float_bits.md
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
id: fn-float_bits
|
||||
name: float_bits
|
||||
category: builtins
|
||||
kind: builtin
|
||||
tokens: float_bits float_from_bits double_bits double_from_bits
|
||||
sig: float_bits(x) -> int / float_from_bits(bits) -> float
|
||||
tip: A float's IEEE bit pattern as an int, and back.
|
||||
order: 53
|
||||
---
|
||||
|
||||
<code>float_bits(x)</code> returns the 32 bits of a <code>float</code> as an <code>int</code>, and <code>float_from_bits(bits)</code> reads them back. <code>double_bits</code> / <code>double_from_bits</code> do the same for a <code>double</code> with a <code>long</code>. Use them where a float has to travel as raw data: a file format, a network packet, or a <code>words</code> buffer shared with code that still stores bit patterns.
|
||||
|
||||
Parameters:
|
||||
- `x` — the float to encode (`float_bits`), or the bits to decode (`float_from_bits`)
|
||||
|
||||
```ludic
|
||||
program Bits {
|
||||
entry {
|
||||
print(float_bits(1.0)) # 1065353216 (0x3F800000)
|
||||
print(float_from_bits(0x40000000)) # 2.0
|
||||
}
|
||||
}
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue