此 C 代码试图找到负数的绝对值,但输出也是负数。谁能告诉我如何克服这个问题?
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <inttypes.h>
int main() {
int64_t a = 0x8000000000000000;
a = llabs(a);
printf("%" PRId64 "\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出
-9223372036854775808
Run Code Online (Sandbox Code Playgroud)
更新:
感谢您的所有回答。我知道这是一个非标准值,这就是我无法对其执行绝对操作的原因。但是,我确实在遗传编程模拟的实际代码库中遇到过这种情况。这里的“有机体”不了解 C 标准并坚持生成此值:) 谁能告诉我解决此问题的有效方法?再次感谢。
让我们说我有很多CUDA内核,我可以要求GPU执行。无论如何,我都不想修改内核代码(包括一个陷阱)。
有没有办法杀死这样一个正在运行的内核?
我打算自动生成内核(遗传编程)。这些内核可能具有需要很长时间才能完成的行为。如果我可以在内核运行时杀死它,那么我可以维护一个计时器并根据需要杀死它。
我使用go/parser来解析 golang 文件并检查它的 AST。我有一个特定的问题,我想使用 go/parser 但我遇到了障碍。
考虑以下文件存在于 GOPATH/src 中
$GOPATH/src/
example.go
example_package/
example_package.go
Run Code Online (Sandbox Code Playgroud)
以下是上述文件的内容
例子.go
package main
import (
"example_package"
)
type MyObject struct {
base *example_package.BaseObject
}
func DoMyThing(arg *example_package.FirstArg) {
arg.Write(10)
}
func DoMyAnotherThing() {
}
func main() {
example_package.GetItStarted(&MyObject{})
}
Run Code Online (Sandbox Code Playgroud)
example_package.go
package example_package
func GetItStarted(obj interface{}) {
}
type FirstArg interface {
Read() int
Write(x int)
}
type BaseObject struct {
}
func (p *BaseObject) DoSomething(arg *FirstArg, a int) {
arg.Write(arg.Read() + a)
}
Run Code Online (Sandbox Code Playgroud)
我的意图是编写一个名为 …