Ваш код C слегка сломан.Вы берете два целых и делаете float = int / int
.Проблема здесь в том, что правила приведения таковы, что C сначала делит одно int на другое, а затем приводит к плавающему.Таким образом, прохождение 3, 2 приведет к 3/2 == 1, а не к 1,5.
Вы хотите что-то более похожее на
float d = (float) value1 / value2;
По отношению к 1.4e24, которое вы получаете.Это возвращаемое значение искажается.
Это потому, что вы объявляете функцию деления как Float
вместо float
.Это не одно и то же.Float
- это значение в штучной упаковке, и оно определенно не того же типа, что и jfloat
на стороне C.
Если вы измените собственное объявление на
public native float divide(int x, int y);
, оно должновсе начинают работать правильно.(обратите внимание на отсутствие заглавной буквы на 'float'!)