Comments (6)
Oh god, here come the floating-point nightmares. Can you add a println FMOD(-5.0, 0.0)
line, and re-run? (The location within the file doesn't matter. It will be printed as another diff, so no need to change anything else either.)
from rgbds.
As I stated I lack this hardware, but I asked the reporter if they can help test.
If not I can try to cross-compile it later...
from rgbds.
The issue here is that the result of those operations is, respectively, infinity and NaN. Those values don't convert to integers cleanly. Some CPUs do it one way, some do it another way. Converting infinity or NaN to an integer in C is definitely UB and not portable in the slightest.
from rgbds.
Since rgbasm just has fixed-point, I'd suggest converting Infinity to the maximum positive value, -Infinity to the maximum negative value, and NaN to 0 (same as how various other non-asm-time-computable expressions become 0).
from rgbds.
It might be possible to reproduce this on x86_64
using ubsan with clang ( 18.1.2).
FLAGS='-O0 -g -fno-omit-frame-pointer -fsanitize=undefined' && make Q= CXXFLAGS="$FLAGS" LDFLAGS="$FLAGS" CXX=clang++
math...
--- /dev/null 2024-03-23 23:47:52.120956538 -0700
+++ /tmp/tmp.0Tczm9DMP3 2024-03-30 19:17:50.224177174 -0700
@@ -0,0 +1,2 @@
+src/asm/fixpoint.cpp:28:18: runtime error: -inf is outside the range of representable values of type 'int'
+SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/asm/fixpoint.cpp:28:18
math.err mismatch!
from rgbds.
Honestly, I'd suggest a simple if (!isfinite(value)) value = 0;
fix for all floats before being converted back to fixed β there's simply no reasonable representation for infinity or NaN, so you might as well kill the problem in one go.
from rgbds.
Related Issues (20)
- why can't charmaps be 16-bit HOT 5
- Why canβt use newer 7.0version in nix HOT 3
- Security vulnerability through fuzzing HOT 1
- Allow a color in an inline palette spec to be `none`
- Make sure rgbasm and rgblink report "`<stdin>`" or "`<stdout>`" for `-` as appropriate
- Missing contributing documentation
- INCHARMAP doesn't always produce correct output HOT 1
- Refactoring and style cleanup with C++ HOT 3
- Don't `#include <stdbool.h>`
- Accept multiple exported constants if they agree on a value HOT 3
- Run `strip` on binaries before publishing them
- Associate sizes with labels, and add a new way to delimit those sizes HOT 3
- Check .sym file reported addresses and sorting HOT 4
- CI should verify ROM hashes for all projects
- .sym files are not sorted in ascending order
- Fix CI with Ubuntu 22.04 HOT 3
- `\@` in an `INCLUDE`d file increments at its EOF unless inherited from a parent context HOT 1
- Performance improvements for C++
- can't build 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 rgbds.